我想创建我的数据库的备份,但我的手机上没有SDCARD。我想在内部存储中创建备份,但下一个代码失败......
try {
File sd = Environment.getExternalStorageDirectory();
File data = Environment.getDataDirectory();
if (sd.canWrite()) {
String currentDBPath = "//storage//sdcard0//MyApp//turnos.db";
String backupDBPath = "turnos.db";
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();
}
} mensajeOK("INFO", "Copia creada.");
} catch (Exception e) {
Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG).show();
}
我拥有WRITE_EXTERNAL_STORAGE权限。
答案 0 :(得分:5)
永远没有硬编码路径。
//
不是目录分隔符。 /
是。
/storage/sdcard0
可能不存在 - 使用Environment.getExternalStorageDirectory()
或getExternalFilesDir()
getDataDirectory()
不太可能是相关位置
您现有的数据库,如果您将其置于正常位置,可以通过getDatabasePath()
找到Context
上提供的方法(例如,您的Activity
)
始终使用例外记录您的堆栈跟踪,例如通过Log.e()
,而不是丢弃该信息,以帮助您更好地调试问题
这可能不是您当前方法的所有问题,但它应该让您开始。
答案 1 :(得分:2)
该行
String currentDBPath = "//storage//sdcard0//MyApp//turnos.db";
可能会解决您的大部分问题。
//
。始终是/
Environment.getExternalStorageDirectory()
转到SD卡答案 2 :(得分:0)
谢谢!在您的帮助下,我完成了数据库的备份:
try {
File sd = Environment.getExternalStorageDirectory();
File data = Environment.getDataDirectory();
if (sd.canWrite()) {
String currentDBPath = "data/com.turnos/databases/Horarios";
String backupDBPath = "BackupHorarios";
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(getApplicationContext(), "Import Successful!", Toast.LENGTH_SHORT).show();
}
}
} catch (Exception e) {
Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG).show();
}