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

我正在尝试将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();

        }

    }


}


慕娘9325324
浏览 321回答 3
3回答

喵喵时光机

我不确定,但这可以在我测试过的每台设备上使用。我从这里的某个地方偷了这个方法,并使其在备份和还原方面通用: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()只是字符串值
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android