gpt4 book ai didi

java - 将数据库复制/备份到 SD 卡 Android

转载 作者:行者123 更新时间:2023-12-01 05:35:53 26 4
gpt4 key购买 nike

我正在使用这段代码,它只持续到达输出文件行并抛出异常。谁能看出这一行可能有什么问题吗?

    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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com