我正在使用这段代码,它只持续到达输出文件行并抛出异常。谁能看出这一行可能有什么问题吗?
try{
Log.e("Trying","try");
// Local database
InputStream input = new FileInputStream("/data/data/package/databases/database");
Log.e("Input","in");
// create directory for backup
// Path to the external backup
OutputStream output = new FileOutputStream("/sdcard/android/package/databases/mydatabase.db");
Log.e("Output","out");
// transfer bytes from the Input File to the Output File
byte[] buffer = new byte[1024];
Log.e("Buffer","Buff");
int length;
while ((length = input.read(buffer))>0) {
output.write(buffer, 0, length);
}
Log.e("After While","try");
output.flush();
output.close();
input.close();
} catch (IOException e) {
throw new Error("Copying Failed");
}
最佳答案
我怀疑这是问题的原因,但以下两行:
OutputStream output = new FileOutputStream("/sdcard/android/package/databases/mydatabase.db");
InputStream input = new FileInputStream("/data/data/package/databases/database");
应该变成:
File sdcard = Environment.getExternalStorageDirectory();
File outputFile = new File(sdcard, "android/package/databases/mydatabase.
File data = Environment.getDataDirectory();
File inputFile = new File(data, "data/package/databases/database");
InputStream input = new FileInputStream(inputFile);
OutputStream output = new FileOutputStream(outputFile);
这是因为不同手机上的SD卡和数据目录可能位于不同的位置。通常,您需要执行 /mnt/sdcard/
来实际引用 sd 卡,但最好的方法仍然是使用文件并使用 Environment
,如我上面所示。
您当然需要将其全部放入 try block 中,就像您已经拥有的那样,然后在 catch 中,您需要放入 e.printStackTrace();
,然后如果出现错误抛出时,您可以查看 logcat 中的错误来确定代码失败的位置,而不是每隔几行使用日志。
并且,在您的 list 中,您必须拥有以下权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
关于java - 将数据库复制/备份到 SD 卡 Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8214512/