printwriter 是 java 中支持格式化输出的文本写入类,可关联文件、字符串缓冲区或控制台;推荐用 try-with-resources 管理资源,并用 printf 配合 %s、%d、%.2f、%n 等格式符实现清晰安全的输出。

PrintWriter 是 Java 中用于便捷输出文本的类,它支持格式化输出(类似 printf),比直接拼接字符串更清晰、安全,也比 System.out.println() 更灵活。
创建 PrintWriter 实例
可以将 PrintWriter 关联到文件、字节数组、字符串缓冲区或标准输出:
- 输出到控制台:
new PrintWriter(System.out)(注意:通常直接用System.out.printf()更简单) - 输出到文件:
new PrintWriter("output.txt")(Java 7+ 支持自动编码和异常处理) - 输出到字符串:
new PrintWriter(new StringWriter()),适合生成动态文本
建议使用 try-with-resources 确保资源关闭:
try (PrintWriter pw = new PrintWriter("report.txt", "UTF-8")) {
pw.printf("用户:%s,余额:%.2f 元%n", "张三", 1234.56);
}
使用 printf 进行格式化输出
PrintWriter 提供 printf(String format, Object... args) 方法,语法与 C 的 printf 类似。常用格式符包括:
-
%s:字符串 -
%d:十进制整数 -
%f:浮点数(默认保留6位小数) -
%.2f:保留两位小数 -
%n:平台无关的换行符(推荐代替\n) %tY-%<tm->:复用前一个日期参数,输出如 <code>2024-05-20
注意自动刷新和缓冲行为
PrintWriter 默认不自动刷新缓冲区(除非构造时显式启用):
- 构造时传入
true可开启自动刷新:new PrintWriter(file, "UTF-8", true) - 否则需手动调用
pw.flush()或pw.close()才能确保内容写入目标 - 未刷新就程序退出,可能导致最后一段输出丢失
与 System.out.printf 的区别
两者格式语法一致,但关键差异在于目标和可控性:
-
System.out.printf()固定输出到控制台,无法重定向或捕获 -
PrintWriter.printf()可自由选择输出目标,适合日志、报表、文件生成等场景 - PrintWriter 不抛出
IOException(失败时仅设置内部错误标志),需用checkError()主动检测
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











