【问题标题】:FileWriter in java not writing to txt file [duplicate]java中的FileWriter不写入txt文件[重复]
【发布时间】:2025-12-24 15:30:07
【问题描述】:

我正在尝试从JOptionPane 获取输入,并使用FileWriter 类将用户输入的内容存储到文本文件中。为了确保存储用户输入的输入,我编写了一个系统。出来,我在 JOptionPane 中输入的内容就会出现。不幸的是,当我打开 .txt 文件时,我输入的任何内容都没有出现!顺便说一下,我输入的文件路径是正确的。

这是我的代码。帮帮我!

String playername = JOptionPane.showInputDialog("What Will Be Your Character's Name?");
System.out.println(playername);
try {
    FileWriter charectersname = new FileWriter("/Users/AlecStanton/Desktop/name.txt/");
    BufferedWriter out = new BufferedWriter(charectersname);
    out.write(playername);
    }
catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
}

【问题讨论】:

  • 看来你需要关闭你的BufferedWriter
  • 同时删除/之后的斜线.txt

标签: java filewriter


【解决方案1】:

你应该在 finally 块中关闭你的 writer。

BufferedWriter out = null;

try {
    out = new BufferedWriter(new FileWriter("/Users/AlecStanton/Desktop/name.txt/"));
    out.write(playername);
} catch (IOException e) {
    e.printStackTrace();
} finally {
    try {
        if(out != null){
            out.close();
        } else {
            System.out.println("Buffer has not been initialized!");
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

【讨论】:

  • 请注意,out 变量范围就在try 代码块中。您的答案应该重构 OP 的代码。
  • 这里的一个常见问题是您需要检查是否正在初始化。否则,您的 finally{} 块可能会引发 NPE
  • 大声笑..刚刚编辑..格式搞砸了。
【解决方案2】:

带有 try() 自动关闭的 Java 7 版本。

try (BufferedWriter out = new BufferedWriter(
        new FileWriter("/Users/AlecStanton/Desktop/name.txt"))) {
    out.write(playername);
} catch (IOException e) {
    e.printStackTrace();
}

注意.txt 后面的/

【讨论】:

    【解决方案3】:

    缓冲写入器只有在写满或关闭时才会写出(因此得名缓冲)。

    所以你可以这样做:

    out.close();
    

    这将刷新缓冲区然后关闭它。如果您只想刷新它但保持打开以供进一步写入(例如,假设您正在编写日志文件),您可以这样做:

    out.flush();
    

    在完成此类资源后,您可能希望这样做。例如

    BufferedWriter out = ...
    try {
       out.write(...);
    }
    catch (Exception e) {
       // ..
    }
    finally {
       out.close();
    }
    

    或者可能使用 Java 7 中的 try-with-resources 构造,(坦率地说)编写代码更可靠。

    【讨论】:

    • 我这样做了,但它不起作用。
    • out.flush();对我有用,因为我还有更多要写的东西