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 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
务必记得 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更适合持续写入多行日志或导出文件
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










