一、简介
在开发中不知道大家有没有遇到过这样的需求,把有数据的数据库文件放在assets资源目录下边,然后在apk应用启动的时候,把assets目录下的数据库文件的数据写入到真机的本地文件中去。
存放在该目录下的文件的特点:
1.assets里面存放的都是原生文件,不会对里面的文件转码
2.该目录下的文件只支持读取,即只能获取输入流
3.不在R文件注册
4.可以建文件夹
5.一般存放网页,图片,音乐,数据库,文本文件等:
备注:
拷贝数据库的最佳时间:项目初始化的时候,一般就是在展示公司Logo,的时候开始拷贝。并且,控制好只拷贝一次。
二、实现步骤(只需2步哦)
1、Android Studio新建项目,把项目切换到project视图,在与java同级的目录下,新建一个assets文件,不多说,来张图
assets目录位置.PNG接下来把数据库文件复制到assets目录下
2、读取assets目录下的数据库,然后把test.db文件拷贝到SDcard的data/datacom.zx.copydatabase路径下,具体实现如下:
/**
* 将assets下的资源复制到应用程序的databases目录下
* @param context 上下文
* @param fileName assets下的资源的文件名
*/
public static void copyAssetsToDB(Context context, String fileName) throws IOException {
//数据库的存储路径,该路径在:data/data/包名/databases目录下,
String destPath = context.getDatabasePath("").getPath();
Log.i("tag","path---->"+destPath);
File file = new File(destPath);
if (!file.exists()) {
file.mkdirs(); //创建目录
}else {
return;
}
//打开assest文件,获得输入流
InputStream is = context.getAssets().open(fileName);
BufferedInputStream bis = new BufferedInputStream(is);
//获得写入文件的输出流
FileOutputStream fos = new FileOutputStream(destPath +File.separator + fileName);
BufferedOutputStream bos = new BufferedOutputStream(fos);
byte[] data = new byte[2 * 1024];
int len;
while ((len = bis.read(data)) != -1){
bos.write(data, 0, len);
}
bos.flush();
bis.close();
bos.close();
}
----------------至此拷贝数据库文件到真机本地已经完成-----------------------------
三、读取拷贝后的数据库中的数据:
/**
* 获得sqlite数据库对象
* @param dbPath 数据库中对应表的完整路径
*/
SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(dbPath, null);
有了这个对象,你就可以根据你的项目需求进行查询数据库的操作了吧
网友评论