如何在Java中使用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 (retrival == JFileChooser.APPROVE_OPTION) { try { FileWriter fw = new FileWriter(chooser.getSelectedFile()+".txt"); fw.write(sb.toString()); } catch (Exception ex) { ex.printStackTrace(); } } }
如果您使用的是Java 7,请使用try with resources。 这是你怎么做的:
try(FileWriter fw = new FileWriter(chooser.getSelectedFile()+".txt")) { fw.write(sb.toString()); }
尝试使用资源在失败或成功时自动调用close()
。
如果您不使用Java 7,请不要忘记调用close()
。 close()
将自动调用flush()
。
... fw.close(); ...
要了解您需要刷新的原因,您需要了解FileWriter的工作原理。 当你说fw.write("blah")
,它实际上将该字符串放入内存中的缓冲区。 填充缓冲区后,FileWriter会将字符串写入硬盘驱动器。 它有这种行为,因为在大块中编写文件效率更高。
如果要在缓冲区达到容量之前清空缓冲区,则需要通过调用flush()
告诉FileWriter。 在通信时调用flush()
也很重要,例如通过互联网,因为在另一端可以看到你的消息之前你需要刷新。 如果您的消息只是在内存中,那么它们将无法使用它们。
完成任何I / O流后,应调用close()
(标准I / O流除外)。 这意味着操作系统不再需要维护此流。 在某些情况下,可以打开有限数量的流,例如文件,因此不要忘记关闭是非常重要的。
当你调用close时,它实际上做了两件事:它清空缓冲区然后关闭流。 这是为了确保在流关闭之前不会遗漏任何东西。
不要忘记flush
并close
FileWriter
。
你需要close()
你的FileWriter。