将数据库文件导出到外部存储时出现问题

Issue when exporting database file to external storage

try{
    File dbFile = context.getDatabasePath(context.getString(R.string.database_name));
    FileInputStream inputStream = new FileInputStream(dbFile);

    String outputFileName = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath() + "/" + dbFile.getName();
    OutputStream outputStream = new FileOutputStream(outputFileName);

    byte[] buffer = new byte[1024];
    int length;
    while((length = inputStream.read(buffer))>0){
        outputStream.write(buffer, 0, length);
    }

    outputStream.flush();
    outputStream.close();
    inputStream.close();
}
catch (Exception e){
    e.printStackTrace();
}

我正在使用此代码将我的应用程序数据库导出到外部存储上的设备下载文件夹。我能够成功地将我的应用程序数据库导出到下载文件夹并重新导出它,但是,如果我使用设备默认文件管理器从下载文件夹中删除导出的文件,我将无法再导出数据库文件此错误:java.io.FileNotFoundException: /storage/emulated/0/Download/APPLICATION_DATABASE: open failed: EEXIST (File exists).

到目前为止,这个问题似乎只发生在我的 Samsung galaxy s10e 运行 android 11 上,因为我已经在 android studio 模拟器上使用 [=16= 测试了这个问题] 11 和 android 9,无法重现。

媒体商店已扫描您的文件。

默认文件管理器在未通知媒体存储的情况下删除了文件。

在创建文件时,OS 检查媒体存储中的现有文件。

然后媒体商店会同意。

您首先必须删除该媒体存储条目

查询媒体存储以获取文件的 uri。

然后删除使用该 uri 的条目。

那个经理太马虎了.. ;-)