Android-java.io.FileNotFoundException:/storage/emulated/0/Notes/File.txt:open failed:enoint(没有这样的文件或目录)

Android-java.io.FileNotFoundException:/storage/emulated/0/Notes/File.txt:open failed:enoint(没有这样的文件或目录),java,android,bufferedreader,readfile,filenotfoundexception,Java,Android,Bufferedreader,Readfile,Filenotfoundexception,我发现很多主题都有相同的问题,但它们无法解决我的问题。 我最初编写的文件如下所示:` File root = new File(Environment.getExternalStorageDirectory(), "Notes"); if (!root.exists()) { root.mkdirs(); } File notefile = new File(root, sFileName); FileWriter writer = null;

我发现很多主题都有相同的问题,但它们无法解决我的问题。 我最初编写的文件如下所示:`

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();
    }
不要担心试捕障碍,我稍后会清除它们:D。 这是一个读卡器,它应该在同一个目录下工作(如果SD卡不存在,将创建SD卡的“注释”),读取文件,并将其放在通知上,如您所见:`

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() 
但是没有成功


有人能帮我吗?

您尝试使用调试器检查根目录是否存在,但执行以下操作时:

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

我认为在外部存储器中写入文件时,它不会创建文件夹, 您需要启用“写入外部存储”权限

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

我的意思是,如果你只想在你的应用程序中使用这个文件,那么就可以使用context.getExternalDirs()来获取你的应用程序的沙盒,它不需要写权限,在android 4.2(Jelly bean)之上

如果您想将文件共享给其他应用程序,那么您做的是正确的

在写入文件之前,请检查是否以编程方式装入外部存储器。

问题已解决 我用过安卓。 我将数据存储在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
    

是否在清单中设置了权限?请检查mkdirs()的返回值,如果返回false,请不要继续。它可能没有创建目录。哪个Android版本?6?我在写外部存储和读外部存储清单中拥有权限。我的版本是5.0,现在我尝试检查mkdirs()编辑:它使用mkdirs()创建目录,返回true我必须在应用程序中保存一个备忘录,当应用程序发现特定的蓝牙设备(信标)时,该备忘录将显示在通知中。context.getExternalDirs()是如何工作的?保存文件的位置?getExternalDirs()提供仅为应用程序指定的路径,看起来此Android/Data//files/此目录仅为应用程序指定,且应用程序只能在该路径内写入,卸载应用程序时会清除该路径。尽管其他应用程序可以看到其中的文件,比如文件浏览器。如果您有SD卡,则该目录位于SD卡中;如果没有SD卡,则该目录位于设备的内部存储器中。getExternalDirs()提供应用程序沙盒的确切位置,它可能是SD卡或内部存储。检查此链接以获取存储。GetExternalFileDirs(context,directoryType)使用此方法实现向后兼容性,它返回文件数组,获取返回的第一项,并继续处理空检查。有关更多详细信息,请查看此链接