跳转到主内容
极星编程网:以代码为星,赴技术山海!

Java中使用PrintWriter向多个文件写入内容的正确方法

java中用printwriter向数组指定的多个文件写入内容时,若未显式关闭流,会导致文件为空;推荐使用try-with-resources语法自动管理资源,确保数据写入并安全释放。 java 中用printwriter向数组指定的多个文件写入内容时,若未显式关闭流,会导致文件为空;推荐使用try-with-resources语法自动管理资源,确保数据写入并安全释放。 在Java中,向多个文件批量写入内容是一个常见需求,例如将不同数据集分别保存为 output_1.txt、output_2.txt 等。但如示例代码所示,仅创建 PrintWriter 并调用 println() 是不够的—— 数据可能仍停留在缓冲区中,未真正写入磁盘,且文件句柄未释放 。根本原因在于:PrintWriter(及其底层 FileWriter)默认启用缓冲,而 close() 既是刷新缓冲区(flush())也是释放系统资源的关键操作。 原始代码的问题在于: 每次循环都新建 FileWriter 和 PrintWriter,但从未调用 close(); 缺少异常处理,一旦中间发生 I/O 异常(如磁盘满、权限不足),程序可能提前终止,导致后续文件未写入、已打开的流泄漏。 ✅ 正确做法:使用 try-with-resources (JDK 7+),它能自动调用 close()(等价于先 flush() 再关闭),无论是否发生异常:
import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.io.PrintWriter; String[] outputs = {"output_1.txt", "output_2.txt"}; for (String filename : outputs) { try (PrintWriter writer = new PrintWriter(Files.newBufferedWriter(Paths.get(filename)))) { writer.println("write this to file"); // 可继续写入多行,无需手动 flush() } catch (IOException e) { System.err.println("写入文件 " + filename + " 时出错: " + e.getMessage()); // 建议记录日志或按需处理异常 } }
? 关键说明: Eclipse导入Android或其他的JAVA项目的正确方法 WORD版 本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看 下载 立即学习 “ Java免费学习笔记(深入) ”; Files.newBufferedWriter(Paths.get(filename)) 返回 BufferedWriter,比直接使用 FileWriter 更高效(带缓冲),且支持指定字符编码(如 .newBufferedWriter(path, StandardCharsets.UTF_8)); try (Resource res = ...) 中声明的资源必须实现 AutoCloseable 接口(PrintWriter 符合); try-with-resources 在语句块结束时 自动执行 close() ,即使内部抛出异常也会保证执行,彻底避免资源泄漏。 ⚠️ 注意事项: 不要在 try-with-resources 外部再调用 writer.close(),否则会触发 IllegalStateException; 若需实时查看输出(如调试),可显式调用 writer.flush(),但通常不必要——close() 已隐含刷新; 避免在循环外复用同一个 PrintWriter 实例写多个文件,因它绑定单个底层流。 总结: 永远不要依赖 GC 来关闭文件流 。坚持使用 try-with-resources,是编写健壮、可维护 Java I/O 代码的基石。

相关文章