PrintWriter 类详解
PrintWriter 类详解
 
PrintWriter 是 Java 字符输出流(Writer)的一个子类,主要用于格式化输出文本数据到文件、控制台或网络流。它比 System.out.println() 更灵活,支持自动刷新、字符编码设置,并且不会抛出 IOException(除非手动开启检查)。
1. 核心特性
(1)构造方法
PrintWriter 提供了多种构造方法,可以适配不同的输出目标:
java
// 1. 直接写入文件(自动处理字符编码)
PrintWriter pw1 = new PrintWriter("output.txt");  // 2. 包装其他输出流(如 FileOutputStream)
PrintWriter pw2 = new PrintWriter(new FileOutputStream("data.txt"));  // 3. 包装另一个 Writer(如 BufferedWriter)
PrintWriter pw3 = new PrintWriter(new BufferedWriter(new FileWriter("log.txt")));  // 4. 输出到标准输出(控制台)
PrintWriter pw4 = new PrintWriter(System.out, true);  // autoFlush=true 
(2)主要方法
| 方法 | 说明 | 
|---|---|
print(String s) | 输出字符串,不换行 | 
println(String s) | 输出字符串并换行 | 
printf(String format, Object... args) | 格式化输出(类似 C 语言的 printf) | 
flush() | 强制刷新缓冲区,确保数据写入目标 | 
close() | 关闭流,释放资源 | 
示例代码:
java
try (PrintWriter pw = new PrintWriter("output.txt")) {pw.println("Hello, Java!");  // 写入一行pw.printf("PI = %.2f", 3.14159);  // 格式化输出// 不需要手动 flush,close() 会自动刷新
} catch (FileNotFoundException e) {e.printStackTrace();
} 
2. 关键知识点
(1)自动刷新(AutoFlush)
-  
如果构造
PrintWriter时传入autoFlush=true,则每次调用println()、printf()或format()都会自动刷新缓冲区。 -  
适用场景:实时日志输出、控制台打印。
 
java
PrintWriter pw = new PrintWriter(System.out, true);  // 自动刷新
pw.println("This will be immediately printed!"); 
(2)异常处理
-  
PrintWriter不会抛出IOException,而是通过checkError()检查是否发生错误: 
java
pw.write("Some data");
if (pw.checkError()) {System.err.println("写入失败!");
} 
(3)字符编码
-  
默认使用系统编码(如 UTF-8),但可以通过
OutputStreamWriter指定编码: 
java
PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream("data.txt"), StandardCharsets.UTF_8)
); 
3. 对比其他输出类
| 类 | 特点 | 适用场景 | 
|---|---|---|
PrintWriter | 字符流,支持格式化输出,自动刷新 | 文本文件、控制台输出 | 
FileWriter | 字符流,简单写入,无格式化 | 纯文本写入 | 
BufferedWriter | 高效缓冲写入,需手动 flush() | 大文件写入 | 
System.out (PrintStream) | 标准输出,仅控制台 | 调试打印 | 
4. 记忆技巧
(1)对比记忆
-  
PrintWritervsPrintStream:-  
PrintWriter是字符流(处理文本),PrintStream是字节流(处理二进制)。 -  
System.out是PrintStream,但PrintWriter更推荐用于文本操作。 
 -  
 
(2)使用场景口诀
"文本输出用 Writer,
格式化选 Print,
自动刷新省代码,
编码问题要注意!"
5. 常见面试题
-  
PrintWriter和BufferedWriter有什么区别?-  
PrintWriter提供格式化方法(printf),而BufferedWriter只提供基础写入。 -  
PrintWriter可以设置自动刷新,BufferedWriter需要手动flush()。 
 -  
 -  
为什么
PrintWriter不抛出IOException?-  
为了简化代码,错误通过
checkError()检查。 
 -  
 -  
如何用
PrintWriter写入 UTF-8 编码文件?-  
使用
OutputStreamWriter包装FileOutputStream并指定编码。 
 -  
 
6. 实际应用
-  
日志记录:写入日志文件(比
System.out更灵活)。 -  
数据导出:生成 CSV、JSON 等文本格式。
 -  
网络通信:向客户端发送 HTTP 响应(如 Servlet 中的
response.getWriter())。 
总结
PrintWriter 是 Java 中高效、灵活的文本输出工具,适用于需要格式化、自动刷新的场景。掌握它的构造方法、核心 API 和异常处理机制,能让你在文件操作和 I/O 编程中更加得心应手! �
练习建议:
-  
尝试用
PrintWriter生成一个 CSV 文件。 -  
对比
PrintWriter和FileWriter的性能差异(大文件测试)。 
