Java中的FileWriter没有将内容写入txt文件

5
我正在尝试从一个JOptionPane中获取输入,并使用FileWriter类将用户键入的内容存储到文本文件中。为了确保来自用户键入内容的输入被存储,我写了一个system.out,我在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 - Luiggi Mendoza
2
同时删除 .txt 后面的斜杠 / - Joop Eggen
3个回答

18

缓冲写入器只在它们满或被关闭时才会写出内容(因此名为Buffered)。

因此,您可以这样做:

out.close();

这将刷新缓冲区,然后关闭它。如果你只想刷新缓冲区但保持它打开以进行进一步的写入(比如像写日志文件),你可以这样做:

out.flush();

当您完成对此资源的使用时,很可能会想要这样做。例如:

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

或者在Java 7中使用try-with-resources结构,这样编写代码更加可靠。


我已经尝试过了,但是它没有起作用。 - Ari
out.flush(); 对我有用,因为我还有更多的要写。 - FullStackDeveloper

4

你应该在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();
    }
}

1
请注意,out 变量的作用域仅限于 try 代码块中。您的答案应重构 OP 的代码。 - Luiggi Mendoza
这里的一个常见问题是需要检查是否已初始化。否则,您的finally{}块可能会抛出NPE。 - Brian Agnew
哈哈..我只是在编辑..格式混乱了。 - Sajal Dutta

4
Java 7版本具有自动关闭的try()功能。
try (BufferedWriter out = new BufferedWriter(
        new FileWriter("/Users/AlecStanton/Desktop/name.txt"))) {
    out.write(playername);
} catch (IOException e) {
    e.printStackTrace();
}

注意在 .txt 后面要加上 /

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接