我们正在尝试将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();
}
}
答案 0 :(得分:1)
如果您查看DBHelper类,则在代码前面有一些变量,您可以在其中定义数据库名称。像THE_PATH +" PassWord"我将发布代码以在INTERNAL存储中找到正确的数据库路径
File dir = getDatabasePath("PassWord").getAbsoluteFile();
String currentDBPath = dir.getPath();
那么删除单词THE_PATH并在其他代码中设置路径?