在Android中重命名ExternalFilesDir中的数据库文件
我正在将预填充的数据库从资产复制到应用程序的外部文件目录。我的代码是-在Android中重命名ExternalFilesDir中的数据库文件,android,file-rename,android-external-storage,Android,File Rename,Android External Storage,我正在将预填充的数据库从资产复制到应用程序的外部文件目录。我的代码是- private boolean copyDatabaseFromAssets(Context context, String databaseName , boolean overwrite) { String outputFile_path = context.getExternalFilesDir(null) + "/" + databaseName; File outputFile = new Fi
private boolean copyDatabaseFromAssets(Context context, String databaseName , boolean overwrite) {
String outputFile_path = context.getExternalFilesDir(null) + "/" + databaseName;
File outputFile = new File(outputFile_path);
if (outputFile.exists() && !overwrite) {
return true;
}
outputFile_path = context.getExternalFilesDir(null) + "/" + databaseName + ".temp";
outputFile = new File(outputFile_path);
Log.d(LOGCAT, "Initial File Path : " + outputFile_path);
Log.d(LOGCAT, "Initial File : " + outputFile);
outputFile.getParentFile().mkdirs();
try {
InputStream inputStream = context.getAssets().open(databaseName);
OutputStream outputStream = new FileOutputStream(outputFile);
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, length);
}
outputStream.flush();
outputStream.close();
inputStream.close();
outputFile_path = context.getExternalFilesDir(null) + "/" + databaseName;
outputFile = new File(outputFile_path);
Log.d(LOGCAT, "Final File Path : " + outputFile_path);
Log.d(LOGCAT, "Final File : " + outputFile);
if(outputFile.renameTo(outputFile)){
Log.d(LOGCAT, "Rename was successful!");
} else {
Log.d(LOGCAT, "Rename was NOT successful!");
}
} catch (IOException e) {
if (outputFile.exists()) {
outputFile.delete();
}
return false;
}
return true;
}
是的,上述代码确实将数据库从资产文件夹复制到应用程序的外部目录。但是,我面临的问题是-数据库没有重新命名为其原始名称。我的相关日志是-
11-25 21:07:01.487 24573-24573/? D/MainActivity: Initial File Path : /storage/emulated/0/Android/data/in.atultiwari.testapp/files/mydb.db.temp
11-25 21:07:01.487 24573-24573/? D/MainActivity: Initial File : /storage/emulated/0/Android/data/in.atultiwari.testapp/files/mydb.db.temp
11-25 21:07:01.509 24573-24573/? D/MainActivity: Final File Path : /storage/emulated/0/Android/data/in.atultiwari.testapp/files/mydb.db
11-25 21:07:01.509 24573-24573/? D/MainActivity: Final File : /storage/emulated/0/Android/data/in.atultiwari.testapp/files/mydb.db
11-25 21:07:01.510 24573-24573/? D/MainActivity: Rename was NOT successful!
我还在清单中使用以下权限-
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
已经好几个小时了,我都不知道我在哪里出错了?最终文件和最终文件路径都是相同的,所以可能会出现问题,请在将
数据库名称更改为其他名称后尝试一下@ρρσѕρєK抱歉,我没有正确地理解您Final file
是类型文件(outputFile
),它包含最终文件名
作为字符串(outputFile\u路径
)。所以它们的Logcat是相同的,但它们都是不同类型的。或者,如果指向初始名称和最终名称,则必须更新最终文件路径的字符串。所以,初始路径/字符串和最终路径/字符串是不同的(也可以在logcat中看到),我的意思是您有databaseName=“mydb.db”代码>对吗?尝试将其更改为databaseName=“mydb\u new.db”代码>@ρцσρєцK Ok。我会试着回去。谢谢。@ρѕρєK谢谢你,先生。在过去的几个小时里,我反复阅读了这段代码一百次,每次我都忽略了这样一个事实:在将数据库重新命名为原始名称时,我无意中弄乱了临时数据库名称
,这一切都是因为我认为,我可以让这段代码在不同的场合使用具有不同值的单个变量。你有敏锐的头脑和敏锐的眼睛去捕捉它。:)