在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谢谢你,先生。在过去的几个小时里,我反复阅读了这段代码一百次,每次我都忽略了这样一个事实:在将数据库重新命名为原始名称时,我无意中弄乱了
临时数据库名称
,这一切都是因为我认为,我可以让这段代码在不同的场合使用具有不同值的单个变量。你有敏锐的头脑和敏锐的眼睛去捕捉它。:)