在 Android 11 中创建 CSV 文件返回错误“java.io.FileNotFoundException:EPERM(不允许操作)”

Cha*_*son 2 csv android android-11

您好,我正在尝试在我的 Android 应用程序中创建一个 csv 文件。当我尝试在下面的 android 10 上运行我的代码时,它可以工作。但我似乎找不到为什么我不能在已经是 Android 11 的设备上执行此操作的问题。

这是我的清单权限:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
    android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<application
        ...
        android:requestLegacyExternalStorage="true">
Run Code Online (Sandbox Code Playgroud)

这是我的代码,我在下载文件夹中创建一个文件夹

@NonNull
public static File getStorageDirectory() {
    if (Environment.getExternalStorageState() == null) {

        File f = new File(Environment.getDataDirectory().getAbsolutePath() + "/Download/(Project Name)/");

        if(!f.exists())
            f.mkdirs();
        return f;
    } else {
        File f = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Download/(Project Name)/");
        if(!f.exists())
            f.mkdirs();
        return f;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我如何创建 csv 文件的代码

File baseDir = Utility.getStorageDirectory();
String fileName = pollutant.getStationName();
String date = Utility.convertDate(new Date().getTime(), "dd-MM-yyyy HH:mm:ss");
File csvFile = new File(baseDir, fileName + "(1hr - "+pollutant.getPollutantName()+")(" + date + ").csv");

FileWriter writer;
if(csvFile.exists() && !csvFile.isDirectory()) {
    writer = new FileWriter(csvFile , true);
} else {
    writer = new FileWriter(csvFile);
}
Run Code Online (Sandbox Code Playgroud)

我已经在 android 11 的下载文件夹中创建了一个文件夹,问题是当我尝试创建 csv 零件程序时返回一个

java.io.FileNotFoundException: ... open failed: EPERM (Operation not permitted)
Run Code Online (Sandbox Code Playgroud)

我真的很难解决 Android 11 设备的问题

bla*_*pps 9

“日-月-年 时:分:秒”

您的文件名中包含禁用字符。

A:是不允许的。

改为"dd-MM-yyyy HH.mm.ss"左右。