一、打印流
1.1 什么是打印流?
打印流 是 Java 提供的一类高级输出流,用于以方便、灵活的方式输出格式化数据 。它们屏蔽了底层字节/字符转换的复杂性,直接支持 print()、println()、printf() 等直观方法。
Java 中有两个核心打印流类:
| 类名 | 继承关系 | 输出单位 | 特点 |
|---|---|---|---|
PrintStream |
FilterOutputStream → OutputStream |
字节流 | 常用于 System.out,不抛出 IOException |
PrintWriter |
Writer |
字符流 | 支持自动刷新、更适用于文本输出 |
打印流不能读,只能写,只有输出流。

一句话理解:
PrintStream= 字节版打印流(如System.out)PrintWriter= 字符版打印流(推荐用于文件文本输出

1.2 字节打印流
1. 核心特性
- 属于字节输出流体系
- 不会抛出 IOException(内部捕获并设置错误标志)
- 自动刷新(可选)
- 支持格式化输出(
printf/format)


java
// 1、创建字节打印流的对象
PrintStream ps = new PrintStream(new FileOutputStream("lkb04-File&IOCode\\a.txt"), true, Charset.forName("GBK"));
// 2、写出数据
ps.println(97);
ps.print(97);
ps.println();
ps.printf("%.2f", 9.5);
// 3、释放资源
ps.close();
1.3 字符打印流
1. 核心优势
- 属于字符输出流体系
- 支持指定字符编码 (通过包装
OutputStreamWriter) - 可配置自动刷新(autoFlush)
- 更适合处理国际化文本


java
// 1、创建字符打印流的对象
PrintWriter pw = new PrintWriter(new FileWriter("D:\\a.txt"), true);
// 2、写出数据
pw.println("hello world");
pw.print("hello world");
pw.printf("%.2f", 9.5);
// 3、关闭资源
pw.close();
1.4 PrintStream vs PrintWriter:关键对比
| 特性 | PrintStream |
PrintWriter |
|---|---|---|
| 流类型 | 字节流 (OutputStream) |
字符流 (Writer) |
| 异常处理 | 不抛出 IOException(静默失败) | 可能抛出 IOException(更安全) |
| 字符编码 | 使用平台默认编码(易乱码) | 可显式指定编码(推荐 UTF-8) |
| 自动刷新 | 构造时可设 autoFlush=true |
构造时可设 autoFlush=true |
| 典型用途 | System.out、简单控制台输出 |
文件日志、文本报告、国际化应用 |
| 文本安全性 | ❌ 不适合多语言文本 | ✅ 适合多语言文本 |
✅ 结论:
- 控制台输出:用
PrintStream(如System.out) - 文件文本输出:优先选择
PrintWriter+ 显式 UTF-8 编码
1.5 打印流的核心优势
1. 自动类型转换
无需手动调用 String.valueOf(),直接输出任意对象:
java
pw.println(123); // int
pw.println(true); // boolean
pw.println(new Date()); // Object(调用 toString())
2. 强大的格式化能力
通过 printf() 或 format() 实现 C 风格格式化:
java
pw.printf("商品:%s,价格:¥%,.2f,库存:%d%n", "笔记本电脑", 5999.99, 100);
// 输出:商品:笔记本电脑,价格:¥5,999.99,库存:100
占位符全览:
原文链接:https://blog.csdn.net/2401_84643729/article/details/155781312
3. 简化代码
相比原始 Writer 或 OutputStream,代码更简洁:
java
// 传统方式
writer.write("Total: ");
writer.write(String.valueOf(total));
writer.write("\n");
// 打印流方式
pw.println("Total: " + total);

Java 的打印流系统通过 PrintStream 和 PrintWriter 为开发者提供了高效、简洁、格式化的输出能力:
PrintStream:适合控制台、简单字节输出,代表就是System.outPrintWriter:适合文本文件、国际化应用,强烈推荐用于文件写入
🌟 终极建议 :
写文件?用 PrintWriter + OutputStreamWriter + StandardCharsets.UTF_8!
写控制台?放心用 System.out(它就是 PrintStream)!