Android - java.io.FileNotFoundException: /storage/emulated/0/Notes/File.txt: 打开失败: ENOENT (没有那个文件或目录)

Android - java.io.FileNotFoundException: /storage/emulated/0/Notes/File.txt: open failed: ENOENT (No such file or directory)

我发现很多主题都有同样的问题,但他们无法解决我的问题。 我最初写一个文件如下:`

File root = new File(Environment.getExternalStorageDirectory(), "Notes");
    if (!root.exists()) {
        root.mkdirs();
    }
    File notefile = new File(root, sFileName);
    FileWriter writer = null;
    try {
        writer = new FileWriter(notefile);
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    try {
        writer.append(sBody);
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    try {
        writer.flush();
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    try {
        writer.close();
    } catch (IOException e1) {
        e1.printStackTrace();
    }

不要担心 try 和 catch 块,我稍后会清除它们:D。 这是应该在同一目录中工作的 reader (如果 sdcard 的 "Notes" 不存在,将被创建),读取文件,并将其放在 Notify 上可以看到:`

File root = new File(Environment.getExternalStorageDirectory(), "Notes");
    if (!root.exists()) {
        root.mkdirs();
    }

    File file = new File(root, "Nota.txt");


    //Read text from file
    text = new StringBuilder();

    try {
        BufferedReader br = new BufferedReader(new FileReader(file));
        String line;
        while ((line = br.readLine()) != null) {
            text.append(line);
            text.append('\n');
        }
        br.close() ;
    }catch (IOException e) {
        e.printStackTrace();
    }

我真的不明白为什么我会遇到这个问题,我什至尝试

getExternalStorageDirectory().getAbsolutePath() 

但没有成功。

有人可以帮助我吗?

您在执行以下操作时已尝试使用调试器检查 root 是否存在:

File root = new File(Environment.getExternalStorageDirectory(), "Notes");
if (!root.exists()) {
    root.mkdirs();
}

我认为它不会在您写入文件时创建文件夹

要在外部存储中写入文件, 您需要启用 WRITE_EXTERNAL_STORAGE 权限。

为什么要尝试在外部存储中写入文件?

我的意思是,如果您只想将此文件用于您的应用程序,则使用 context.getExternalDirs() 获取您应用程序的沙箱,它不需要写权限,高于 android 4.2(Jelly bean ).

如果您想将文件共享到其他应用程序,那您做对了。

并且在写入文件之前,检查外部存储是否以编程方式挂载。

问题已解决

我用了 SharedPreferences 个 Android。 我将数据存储在 MainActivity 中,并按如下方式接收到我的 Class 中:

  • MainActivity

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString("string_id", InputString); //InputString: from the EditText
    editor.commit();
    
  • 在我Class获取我的数据

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    String data = prefs.getString("string_id", "no id"); //no id: default value