如何在Java中使用JFileChooser保存文件?

如何在Java中使用JFileChooser保存文件?,java,swing,file-io,jfilechooser,Java,Swing,File Io,Jfilechooser,我有以下代码。它保存文件,但内容为空。怎么了 public void saveMap() { String sb = "TEST CONTENT"; JFileChooser chooser = new JFileChooser(); chooser.setCurrentDirectory(new File("/home/me/Documents")); int retrival = chooser.showSaveDialog(null); if (re

我有以下代码。它保存文件,但内容为空。怎么了

public void saveMap() {
    String sb = "TEST CONTENT";
    JFileChooser chooser = new JFileChooser();
    chooser.setCurrentDirectory(new File("/home/me/Documents"));
    int retrival = chooser.showSaveDialog(null);
    if (retrival == JFileChooser.APPROVE_OPTION) {
        try {
            FileWriter fw = new FileWriter(chooser.getSelectedFile()+".txt");
            fw.write(sb.toString());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

您需要
close()
您的FileWriter。

不要忘记
刷新
关闭
您的
FileWriter
如果您使用的是Java 7,请使用资源试用。这就是你要做的:

try(FileWriter fw = new FileWriter(chooser.getSelectedFile()+".txt")) {
    fw.write(sb.toString());
}
尝试使用资源失败或成功时自动调用
close()

如果您没有使用Java 7,请不要忘记调用
close()
close()
将自动调用
flush()

要了解为什么需要刷新,需要了解文件写入程序的工作原理。当你说
fw.write(“blah”)
时,它实际上会将该字符串放入内存中的缓冲区。填充缓冲区后,FileWriter会将字符串写入硬盘。它有这种行为,因为在大块中编写文件效率更高

如果要在缓冲区达到容量之前清空缓冲区,需要通过调用
flush()
告诉文件编写器这一点。调用
flush()。如果你的信息只是停留在记忆中,它们就没有多大用处了

完成任何I/O流后,应调用
close()
(标准I/O流除外)。这意味着操作系统不再需要维护这个流。在某些情况下,可以打开的流的数量是有限的,例如使用文件,因此不要忘记关闭非常重要


当您调用close时,它实际上做了两件事:清空缓冲区,然后关闭流。这是为了确保在流关闭之前不会留下任何东西。

关闭帮助,现在它可以工作了。但是刷新它意味着什么呢?请参阅javadocs:
...
fw.close();
...