Java 复制Android数据库
我一直在尝试创建应用程序数据库的副本并将其保存到手机的根目录中,但没有成功。我的日志如下: 第一步 步进停止 显然Java 复制Android数据库,java,android,database,android-sqlite,Java,Android,Database,Android Sqlite,我一直在尝试创建应用程序数据库的副本并将其保存到手机的根目录中,但没有成功。我的日志如下: 第一步 步进停止 显然if(sd.canWrite())是第一个错误吗?有人能帮忙吗?我的点子快用完了。谢谢 public void save() { File data = Environment.getDataDirectory(); File sd = new File(Environment.getExternalStorageDirectory().toStr
if(sd.canWrite())
是第一个错误吗?有人能帮忙吗?我的点子快用完了。谢谢
public void save() {
File data = Environment.getDataDirectory();
File sd = new File(Environment.getExternalStorageDirectory().toString());
sd.mkdirs();
Log.d("XXXXXXXXXXXXXXXXXXX", "STEP ONE");
if (sd.canWrite()) {
Log.d("XXXXXXXXXXXXXXXXXXX", "STEP TWO");
String currentDBPath = "/data/com.test.example/databases/example_db";
String backupDBPath = "/mytest" + "version_two" + ".db";
File currentDB = new File(data, currentDBPath);
File backupDB = new File(sd, backupDBPath);
Log.d("XXXXXXXXXXXXXXXXXXX", "STEP THREE");
if (currentDB.exists()) {
Log.d("XXXXXXXXXXXXXXXXXXX", "STEP FOUR");
FileChannel src;
try {
Log.d("XXXXXXXXXXXXXXXXXXX", "STEP FIVE");
src = new FileInputStream(currentDB).getChannel();
FileChannel dst = new FileOutputStream(backupDB)
.getChannel();
try {
Log.d("XXXXXXXXXXXXXXXXXXX", "STEP SIX");
dst.transferFrom(src, 0, src.size());
src.close();
dst.close();
} catch (IOException e) {
Log.d("XXXXXXXXXXXXXXXXXXX", "STEP ONE DEAD");
e.printStackTrace();
}
} catch (FileNotFoundException e) {
Log.d("XXXXXXXXXXXXXXXXXXX", "STEP TWO DEAD");
e.printStackTrace();
}
}
}else{
Log.d("XXXXXXXXXXXXXXXXXXX", "STEP DEAD");
}
}
我清单的剪辑-我不知道android:allowBackup=“true”是如何到达那里的
在设备输出上:
01-13 14:16:13.082: D/XXXXXXXXXXXXXXXXXXX(30105): STEP ONE
01-13 14:16:13.082: D/XXXXXXXXXXXXXXXXXXX(30105): STEP TWO
01-13 14:16:13.082: D/XXXXXXXXXXXXXXXXXXX(30105): STEP THREE
01-13 14:16:13.082: D/XXXXXXXXXXXXXXXXXXX(30105): STEP FOUR
01-13 14:16:13.082: D/XXXXXXXXXXXXXXXXXXX(30105): STEP FIVE
01-13 14:16:13.090: D/XXXXXXXXXXXXXXXXXXX(30105): STEP SIX
由于Environment.getExternalStorageDirectory()返回一个文件,您不需要创建新实例。您可以通过以下方式更改它:
File sd = Environment.getExternalStorageDirectory();
肯定会失败,因为您在sd.mkdirs()
和/
中没有写入权限,而且/mnt
指向的目录应该已经存在sd
- 写入权限-
:是否将其添加到AndroidManifex文件中?可能是因为您忘记添加权限,所以canWrite()返回false写入外部存储
01-13 14:16:13.082: D/XXXXXXXXXXXXXXXXXXX(30105): STEP ONE
01-13 14:16:13.082: D/XXXXXXXXXXXXXXXXXXX(30105): STEP TWO
01-13 14:16:13.082: D/XXXXXXXXXXXXXXXXXXX(30105): STEP THREE
01-13 14:16:13.082: D/XXXXXXXXXXXXXXXXXXX(30105): STEP FOUR
01-13 14:16:13.082: D/XXXXXXXXXXXXXXXXXXX(30105): STEP FIVE
01-13 14:16:13.090: D/XXXXXXXXXXXXXXXXXXX(30105): STEP SIX
File sd = new File(Environment.getExternalStorageDirectory().toString());
File sd = Environment.getExternalStorageDirectory();