5

我正在尝试从 a 获取输入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();
}
4

3 回答 3

18

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

所以你可以这样做:

out.close();

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

out.flush();

完成此类资源后,您可能希望执行此操作。例如

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

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

于 2013-07-19T16:06:10.567 回答
4

您应该在 finally 块中关闭您的作家。

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();
    }
}
于 2013-07-19T16:03:31.040 回答
4

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

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

/注意后遗漏.txt

于 2013-07-19T16:11:43.000 回答