Java中PrintWriter输出文本需正确创建实例并调用print/println/printf方法,推荐用try-with-resources自动关闭;默认带缓冲,不flush或close会导致内容丢失。

Java 中用 PrintWriter 输出文本内容非常直接,关键是正确创建实例并调用打印方法,避免手动刷新或关闭遗漏导致内容未写出。
创建 PrintWriter 实例的常用方式
根据输出目标不同,有几种常见构造方式:
- 输出到文件:
new PrintWriter("output.txt")(默认使用系统编码,建议显式指定编码) - 输出到文件(推荐带编码):
new PrintWriter(Files.newBufferedWriter(Paths.get("output.txt"), StandardCharsets.UTF_8)) - 输出到控制台:
new PrintWriter(System.out)(注意:一般不需要,直接用System.out.println()更简单) - 输出到字符串缓冲区:
new PrintWriter(new StringWriter()),适合生成动态文本再统一获取
写入内容的核心方法
PrintWriter 提供了多种便捷的写入方法,自动处理换行和类型转换:
-
print():不换行输出,支持任意类型(自动调用toString()) -
println():输出后自动换行,最常用 -
printf():支持格式化输出,类似 C 的printf -
write(String)或write(char[]):底层字符写入,较少单独使用
例如:pw.println("Hello " + name + ", age: " + age); 或 pw.printf("Name: %s, Score: %.2f%n", name, score);
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
立即学习“Java免费学习笔记(深入)”;
务必记得 flush 和 close
PrintWriter 内部有缓冲,默认不会立即写入目标。尤其写文件时,不刷新或关闭可能导致内容丢失:
- 手动刷新:
pw.flush()—— 强制把缓冲区内容写出 - 自动刷新(构造时启用):
new PrintWriter(out, true),之后每次println、printf都自动刷新 - 关闭流:
pw.close()—— 自动刷新并释放资源,必须调用
推荐用 try-with-resources 确保关闭:try (PrintWriter pw = new PrintWriter(Files.newBufferedWriter(Paths.get("log.txt"), UTF_8))) {<br> pw.println("Start processing...");<br> pw.printf("Count: %d%n", 42);<br>}
注意事项与常见坑
使用时需留意几个细节:
- 构造失败(如文件路径不可写)会抛出
IOException,需捕获或声明 -
PrintWriter的print系列方法即使出错也不会抛异常,要通过checkError()主动检查是否写入失败 - 不要混用
PrintWriter和底层流(如FileOutputStream)的关闭操作,避免重复关闭异常 - 如果只是临时拼接字符串,考虑用
StringBuilder更轻量;PrintWriter更适合持续写入多行日志或导出文件

















