Java Android不保存txt文件

Java Android不保存txt文件,java,android,Java,Android,我正在学习创建一个简单记事本应用程序的教程,我已经花了好几个小时试图弄清楚为什么我的文件不能保存 在我尝试保存txt文件之前,一切都很正常,我还向清单中添加了权限 我按下保存按钮后,祝酒词也不会出现 注意编辑Java(获取文件名和文本): 要保存的后端Java注意: private String path = Environment.getExternalStorageDirectory().getAbsolutePath() +"/Scripts/"; public void SaveNot

我正在学习创建一个简单记事本应用程序的教程,我已经花了好几个小时试图弄清楚为什么我的文件不能保存

在我尝试保存txt文件之前,一切都很正常,我还向清单中添加了权限

我按下保存按钮后,祝酒词也不会出现

注意编辑Java(获取文件名和文本):

要保存的后端Java注意:

private String path = Environment.getExternalStorageDirectory().getAbsolutePath() +"/Scripts/";

public void SaveNote(String sFileName, String sBody){
    try
    {
        File root = new File(this.path);
        if (!root.exists()) {
            root.mkdirs();
        }
        File file = new File(root, sFileName);
        FileWriter writer = new FileWriter(file);
        writer.append(sBody);
        writer.flush();
        writer.close();
        Toast.makeText(this.context, "Saved", Toast.LENGTH_SHORT).show();
    }
    catch(IOException e)
    {
        e.printStackTrace();

    }
}
日志类别:

>01-19 14:06:48.113 21958-21958/com.test.android.notetutorial W/System.err: java.io.FileNotFoundException: /storage/emulated/0/Scripts/dfeff.txt: open failed: ENOENT (No such file or directory)
>01-19 14:06:48.113 21958-21958/com.test.android.notetutorial W/System.err:     at libcore.io.IoBridge.open(IoBridge.java:452)
>01-19 14:06:48.113 21958-21958/com.test.android.notetutorial W/System.err:     at java.io.FileOutputStream.<init>(FileOutputStream.java:87)
>01-19 14:06:48.113 21958-21958/com.test.android.notetutorial W/System.err:     at java.io.FileOutputStream.<init>(FileOutputStream.java:72)
>01-19 14:06:48.114 21958-21958/com.test.android.notetutorial W/System.err:     at java.io.FileWriter.<init>(FileWriter.java:42)
>01-19 14:06:48.114 21958-21958/com.test.android.notetutorial W/System.err:     at com.test.android.notetutorial.Script_manager.SaveNote(Script_manager.java:50)
>01-19 14:06:48.114 21958-21958/com.test.android.notetutorial W/System.err:     at com.test.android.notetutorial.Script_editor$1.onClick(Script_editor.java:76)
>01-19 14:06:48.114 21958-21958/com.test.android.notetutorial W/System.err:     at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:163)
>01-19 14:06:48.114 21958-21958/com.test.android.notetutorial W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:102)
>01-19 14:06:48.114 21958-21958/com.test.android.notetutorial W/System.err:     at android.os.Looper.loop(Looper.java:148)
>01-19 14:06:48.114 21958-21958/com.test.android.notetutorial W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5525)
>01-19 14:06:48.114 21958-21958/com.test.android.notetutorial W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
>01-19 14:06:48.114 21958-21958/com.test.android.notetutorial W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)
>01-19 14:06:48.114 21958-21958/com.test.android.notetutorial W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
>01-19 14:06:48.114 21958-21958/com.test.android.notetutorial W/System.err: Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory)
>01-19 14:06:48.114 21958-21958/com.test.android.notetutorial W/System.err:     at libcore.io.Posix.open(Native Method)
>01-19 14:06:48.114 21958-21958/com.test.android.notetutorial W/System.err:     at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
>01-19 14:06:48.114 21958-21958/com.test.android.notetutorial W/System.err:     at libcore.io.IoBridge.open(IoBridge.java:438)
>01-19 14:06:48.114 21958-21958/com.test.android.notetutorial W/System.err:     ... 12 more
>01-19 14:06:48.113 21958-21958/com.test.android.nottutorial W/System.err:java.io.FileNotFoundException:/storage/emulated/0/Scripts/dfeff.txt:open failed:enoint(没有这样的文件或目录)
>01-19 14:06:48.113 21958-21958/com.test.android.notetural W/System.err:at libcore.io.IoBridge.open(IoBridge.java:452)
>01-19 14:06:48.113 21958-21958/com.test.android.noteutorial W/System.err:at java.io.FileOutputStream.(FileOutputStream.java:87)
>01-19 14:06:48.113 21958-21958/com.test.android.noteutorial W/System.err:at java.io.FileOutputStream.(FileOutputStream.java:72)
>01-19 14:06:48.114 21958-21958/com.test.android.notetural W/System.err:at java.io.FileWriter.(FileWriter.java:42)
>01-19 14:06:48.114 21958-21958/com.test.android.noteturatorial W/System.err:at com.test.android.noteturatorial.Script_manager.SaveNote(Script_manager.java:50)
>01-19 14:06:48.114 21958-21958/com.test.android.noteturatorial W/System.err:at com.test.android.noteturatorial.Script_editor$1.onClick(Script_editor.java:76)
>01-19 14:06:48.114 21958-21958/com.test.android.noteutorial W/System.err:at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:163)
>01-19 14:06:48.114 21958-21958/com.test.android.notetural W/System.err:at-android.os.Handler.dispatchMessage(Handler.java:102)
>01-19 14:06:48.114 21958-21958/com.test.android.note教程W/System.err:at-android.os.Looper.loop(Looper.java:148)
>01-19 14:06:48.114 21958-21958/com.test.android.notetural W/System.err:at-android.app.ActivityThread.main(ActivityThread.java:5525)
>01-19 14:06:48.114 21958-21958/com.test.android.notetural W/System.err:at java.lang.reflect.Method.invoke(本机方法)
>01-19 14:06:48.114 21958-21958/com.test.android.noteutorial W/System.err:at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)
>01-19 14:06:48.114 21958-21958/com.test.android.noteutorial W/System.err:at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
>01-19 14:06:48.114 21958-21958/com.test.android.noteutorial W/System.err:原因:android.System.ErrnoException:打开失败:enoint(没有这样的文件或目录)
>01-19 14:06:48.114 21958-21958/com.test.android.notetural W/System.err:at libcore.io.Posix.open(本机方法)
>01-19 14:06:48.114 21958-21958/com.test.android.noteutorial W/System.err:at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
>01-19 14:06:48.114 21958-21958/com.test.android.notetural W/System.err:at libcore.io.IoBridge.open(IoBridge.java:438)
>01-19 14:06:48.114 21958-21958/com.test.android.notetural W/System.err:。。。还有12个

在添加内容之前,您忘记了创建新文件

public void SaveNote(String sFileName, String sBody){
    try {
        File root = new File(this.path);
        if (!root.exists()) {
            root.mkdirs();
        }
        File file = new File(root, sFileName);

        if(!file.exists()){ //Check if file exist 
            // Create new File
            file.createNewFile();
        }

        FileWriter writer = new FileWriter(file);
        writer.append(sBody);
        writer.flush();
        writer.close();
        Toast.makeText(this.context, "Saved", Toast.LENGTH_SHORT).show();
    } catch(IOException e){
        e.printStackTrace();
    }
}

您是否添加了存储文件的权限 在manifest.xml中

还要先创建一个文件

public void generateNoteOnSD(String sFileName, String sBody){
    try
    {
        File root = new File(Environment.getExternalStorageDirectory(), "Notes");
        if (!root.exists()) {
            root.mkdirs();
        }
        File gpxfile = new File(root, sFileName);
        FileWriter writer = new FileWriter(gpxfile);
        writer.append(sBody);
        writer.flush();
        writer.close();
        Toast.makeText(this, "Saved", Toast.LENGTH_SHORT).show();
    }
    catch(IOException e)
    {
         e.printStackTrace();
         importError = e.getMessage();
         iError();
    }
   }  

嗨,我用这段代码试过了,日志cat的第一行现在是:01-19 java.io.IOException:open failed:enoint(没有这样的文件或目录)@BloopieBloops你在用Android M设备测试吗?我在用我的个人电脑device@BloopieBloops它有安卓6.0(棉花糖)吗?是的,它在安卓6.0上
public void generateNoteOnSD(String sFileName, String sBody){
    try
    {
        File root = new File(Environment.getExternalStorageDirectory(), "Notes");
        if (!root.exists()) {
            root.mkdirs();
        }
        File gpxfile = new File(root, sFileName);
        FileWriter writer = new FileWriter(gpxfile);
        writer.append(sBody);
        writer.flush();
        writer.close();
        Toast.makeText(this, "Saved", Toast.LENGTH_SHORT).show();
    }
    catch(IOException e)
    {
         e.printStackTrace();
         importError = e.getMessage();
         iError();
    }
   }