数据库名称前面带有null

时间:2017-11-08 18:00:28

标签: android sqlite android-sdcard

我们正在尝试将sqlite数据库备份到SD CARD,数据库已创建并存在于模拟器INTERNAL存储中。问题是当找到INTERNAL存储的路径时,DB的返回名称就像它被命名为“PassWord”一样 我的问题是为什么数据库名称在设备文件浏览中以单词null开头? Android Studio 3.0 Build工具26.0.2 YES Manifest权限添加示例“nullPassWord”代码备份到下面的SD CARD。 如果有更好的方法从内部备份到外部建议欢迎。我们不想使用adb pull。

    public void onCOPY(View view){

    File sd = ContextCompat.getExternalFilesDirs(this, null)[1];// THIS IS OK
    System.out.println("################ SD "+sd);
    //File dir = getDatabasePath("PassWord");
    //String currentDBPath = dir.getPath();
    // dir.getPath(); RETURNS This /data/user/0/package name/databases/PassWord
    String currentDBPath = "/data/user/0/package name/databases/nullPassWord/";
    System.out.println("################ Current DB Path "+currentDBPath);

    FileChannel source;
    FileChannel destination;

    String backupDBPath = "NewPassWord";

    File currentDB = new File(currentDBPath);
    File backupDB = new File(sd, backupDBPath);

    try {
        source = new FileInputStream(currentDB).getChannel();
        destination = new FileOutputStream(backupDB).getChannel();
        destination.transferFrom(source, 0, source.size());
        source.close();
        destination.close();
        Toast.makeText(this, "DB Exported!", Toast.LENGTH_LONG).show();
    } catch(IOException e) {
        e.printStackTrace();
    }
}

1 个答案:

答案 0 :(得分:1)

如果您查看DBHelper类,则在代码前面有一些变量,您可以在其中定义数据库名称。像THE_PATH +" PassWord"我将发布代码以在INTERNAL存储中找到正确的数据库路径

 File dir  = getDatabasePath("PassWord").getAbsoluteFile();
    String currentDBPath = dir.getPath();

那么删除单词THE_PATH并在其他代码中设置路径?