我有一个数据库,我想将它复制到 SD 卡以保留备份,我找到了以下代码:
private void exportDB(){
File sd = Environment.getExternalStorageDirectory();
File data = Environment.getDataDirectory();
FileChannel source=null;
FileChannel destination=null;
String currentDBPath = "/data/"+ "com.example.myapp" +"/databases/"+"mydatabase";
String backupDBPath = "/storage/extSdCard/mydatabase";
File currentDB = new File(data, 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();
} catch(IOException e) {
//e.printStackTrace();
Toast.makeText(this, "Err:"+e, Toast.LENGTH_LONG).show();
}
}
正如我在标题中所写,No such file or directory
当我尝试这样做时,我得到了 ENOENT 错误。
显然数据库应该存储在那里。我尝试将路径更改为一些不同的东西,但仍然没有...我尝试过:
"/data/"+ "com.example.myapp" +"/"+"mydatabase.db"
和
"//data//"+ "com.example.myapp" +"//databases//"+"mydatabase"
Edit1:也试过这个,也不起作用:
String currentDBPath = this.getDatabasePath("mydatabase").toString();
等等没有任何作用,我也找不到以任何方式检查路径的方法。
我基本上已经制作了数据库,在其中插入了几行并具有一些基本功能,例如add()
等等delete()
。我错过了什么吗?我不知道我还能尝试什么。
以下是 logcat 对此的看法:
01-18 11:34:46.215 10337-10337/com.example.myapp D/DBPATH: 数据库路径是/data/data/com.example.myapp/databases/mydatabase.db
01-18 11:34:46.225 10337-10337/com.example.myapp W/System.err:java.io.FileNotFoundException:/data/data/com.example.myapp/databases/mydatabase.db:打开失败:ENOENT (没有这样的文件或目录)
01-18 11:34:46.235 10337-10337/com.example.myapp W/System.err: 在 libcore.io.IoBridge.open(IoBridge.java:456)
01-18 11:34:46.235 10337-10337/com.example.myapp W/System.err: at java.io.FileInputStream.(FileInputStream.java:76)
01-18 11:34:46.235 10337-10337/com.example.myapp W/System.err: 在 com.example.myapp.TabsActivity.exportDB(TabsActivity.java:183)
01-18 11:34:46.235 10337-10337/com.example.myapp W/System.err: 在 com.example.myapp.TabsActivity.onOptionsItemSelected(TabsActivity.java:119)