繁体   English   中英

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

[英]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。 这是应该在同一目录中工作的阅读器(sdcard的“Notes”,如果它不存在,将被创建),读取文件,并将其放在通知上,如您所见:`

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)。

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

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

问题解决了

我使用了 Android 的SharedPreferences 我将数据存储在 MainActivity 并在我的类中接收如下:

  • 主要活动

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM