首页 > 解决方案 > 在 Android 中创建文本文件会导致 FileNotFoundException

问题描述

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

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

我已经尝试过这个线程的答案:如何在 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。

标签: javaandroidtextfilenotfoundexception

解决方案


您是否尝试过添加:

    android:requestLegacyExternalStorage="true"

<application>标签中的清单?另外,不要忘记,从 Android 6.0 开始,即使您将权限写入 Manifest,您也需要请求权限。

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;
            }
        }
    }

推荐阅读