Android工作室将DB文件复制到内部存储而不是wroking

时间:2017-08-26 02:55:54

标签: android

我尝试重新输入,看看是否有任何输入错误,但它仍然无法正常工作。 它甚至没有提示我有任何错误

我在想这是错误地给出了我的内部存储路径文件吗?

这是我要复制到的内部存储文件的位置! Path file

这就是我在onclick函数中调用我的方法的方法:

 else if (view == findViewById(R.id.btnBackup)){
        exportDatabase("stock.db");

    }
}

这是导出数据库的方法:

 public void exportDatabase(String databaseName) {
    try {
        File sd = getFilesDir();
        File data = Environment.getDataDirectory();

        if (sd.canWrite()) {
            String currentDBPath = "//data//"+getPackageName()+"//databases//"+databaseName+"";
            String backupDBPath = "//MyDb";
            File currentDB = new File(data, currentDBPath);
            File backupDB = new File(sd, backupDBPath);

            if (currentDB.exists()) {
                FileChannel src = new FileInputStream(currentDB).getChannel();
                FileChannel dst = new FileOutputStream(backupDB).getChannel();
                dst.transferFrom(src, 0, src.size());
                src.close();
                dst.close();
            }
            Toast.makeText(this, "Backup Done!", Toast.LENGTH_SHORT);
        }

    } catch (Exception e) {
        Toast.makeText(this, "Fail!", Toast.LENGTH_SHORT);
    }
}

1 个答案:

答案 0 :(得分:1)

使用此方法完美无缺。

 public void exportDB(Context mContext) {
    try {
        File sd = mContext.getExternalFilesDir("/database/");
        File data = Environment.getDataDirectory();

        if (sd.canWrite()) {
            String currentDBPath = "//data//" + PACKAGE_NAME + "//databases//" + DATABASE_NAME;
            String backupDBPath = DATABASE_NAME;
            File currentDB = new File(data, currentDBPath);
            File backupDB = new File(sd, backupDBPath);

            FileChannel src = new FileInputStream(currentDB).getChannel();
            FileChannel dst = new FileOutputStream(backupDB).getChannel();
            dst.transferFrom(src, 0, src.size());
            src.close();
            dst.close();
        }
    } catch (Exception e) {
    }
}