在Android中创建文本文件会导致FileNotFoundException

问题描述

我正在开发一个通过BLE获取数据并将其保存在文本文件中的应用程序。

现在的问题是我无法使用我的应用程序创建文本文件

我已经尝试过以下线程的答案:How to create text file and insert data to that file on Android 因此,请不要将其标记为重复项,因为那里提供的答案对我不起作用。

相应的代码是:

try {
        System.out.println(Environment.getExternalStorageState());
        File root =new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS),"BLE_Crawler");
        if (!root.exists()) {
            root.mkdirs();

        }
        File file = new File(root,fileName +".txt");
        if (!file.exists()) {

                file.createNewFile();

        }
        FileWriter writer = new FileWriter(file,true);
        writer.append("test");
        writer.flush();
        writer.close();

    } catch (IOException e) {
        e.printstacktrace();
    }

我得到的错误是:

W/System.err: java.io.FileNotFoundException: /storage/emulated/0/Documents/BLE_Crawler/test.txt: open Failed: ENOENT (No such file or directory)

似乎我没有创建新文件夹的权限,因为“ mkdirs()”行不起作用。但是我不知道如何解决这个问题。

哦,我有

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

在我的AndroidManifest中。

我正在使用SDKVersion 29。

解决方法

您是否尝试添加:

    android:requestLegacyExternalStorage="true"

<application>标签中的清单? 另外,别忘了从Android 6.0开始,即使您在清单中编写权限,也需要请求权限。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        String[] permissions = new String[]{READ_EXTERNAL_STORAGE,WRITE_EXTERNAL_STORAGE};
        for (int i = 0; i < permissions.length; i++) {
            if (checkSelfPermission(permissions[i]) != PackageManager.PERMISSION_GRANTED) {
                requestPermissions(permissions,REQUEST_PERMISSIONS);
                return;
            }
        }
    }