java jfilechooser 保存_java - 如何在Java中使用JFileChooser保存文件? [关闭]

本文探讨了Java中文件保存内容为空的问题,重点讲解了使用FileWriter时的资源管理,包括Java 7的资源自动关闭、flush操作的重要性以及为何需要调用close方法。作者提供了修复建议和常见原因分析。
摘要由CSDN通过智能技术生成

我有以下代码。它保存文件,但内容为空。怎么了?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(FileWriter fw = new FileWriter(chooser.getSelectedFile()+".txt")) {

fw.write(sb.toString());

}

如果失败或成功,请尝试使用资源自动调用。

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

...

fw.close();

...

要理解为什么需要刷新,需要了解文件编写器是如何工作的。当您说flush()时,它实际上会将该字符串放入内存中的缓冲区中。一旦填满缓冲区,文件编写器就会将字符串写入硬盘。它有这样的行为,因为在大的块中编写文件要高效得多。

如果要在缓冲区达到容量之前清空缓冲区,则需要通过调用fw.write("blah")来告诉FileWriter这一点。在通信时,如通过Internet,呼叫flush()也非常重要,因为在另一端看到您的消息之前,您需要刷新。如果你的信息只是停留在记忆中,那么它不会有太大的用处。

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值