读取assets下的数据库文件

作者: 唠嗑008 | 来源:发表于2017-01-21 23:29 被阅读364次

    一、简介

          在开发中不知道大家有没有遇到过这样的需求,把有数据的数据库文件放在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);
    
    

    有了这个对象,你就可以根据你的项目需求进行查询数据库的操作了吧

    相关文章

      网友评论

      • trampcr:数据库升级了怎么办?

      本文标题:读取assets下的数据库文件

      本文链接:https://www.haomeiwen.com/subject/qfpnbttx.html