为了账号安全,请及时绑定邮箱和手机立即绑定

从无根设备中的资产文件夹复制数据库

从无根设备中的资产文件夹复制数据库

慕娘9325324 2019-10-21 12:44:51
我正在尝试将DB从Assets文件夹复制到设备。这段代码在模拟器和根设备上运行正常。我只想知道它是在无根设备上创建任何问题还是可以正常工作。private void StoreDatabase() {    File DbFile = new File(            "data/data/packagename/DBname.sqlite");    if (DbFile.exists()) {        System.out.println("file already exist ,No need to Create");    } else {        try {            DbFile.createNewFile();            System.out.println("File Created successfully");            InputStream is = this.getAssets().open("DBname.sqlite");            FileOutputStream fos = new FileOutputStream(DbFile);            byte[] buffer = new byte[1024];            int length = 0;            while ((length = is.read(buffer)) > 0) {                fos.write(buffer, 0, length);            }            System.out.println("File succesfully placed on sdcard");            // Close the streams            fos.flush();            fos.close();            is.close();        } catch (IOException e) {            e.printStackTrace();        }    }}
查看完整描述

3 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

我不确定,但这可以在我测试过的每台设备上使用。我从这里的某个地方偷了这个方法,并使其在备份和还原方面通用:


public static void movedb(File srcdb, File destdb)

{

    try 

    {

        if (Environment.getExternalStorageDirectory().canWrite()) 

        {                 

            if (srcdb.exists()) 

            {

                FileChannel src = new FileInputStream(srcdb).getChannel();

                FileChannel dst = new FileOutputStream(destdb).getChannel();

                dst.transferFrom(src, 0, src.size());

                src.close();

                dst.close();                    

            }

            else

            {

                //ERROR: "Database file references are incorrect"                    

            }

        }

        else

        {

           //ERROR: "Cannot write to file"

        }

    }

    catch (Exception e) 

    {

        //ERROR: e.getMessage()

    }

}

然后我通过调用以下内容进行备份:


movedb(this, getDatabasePath(getDbName()), new File(Environment.getExternalStorageDirectory(), getDatabaseBackupPath()));

哪里getDatabasePath()和getDatabaseBackupPath()只是字符串值


查看完整回答
反对 回复 2019-10-21
  • 3 回答
  • 0 关注
  • 320 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信