Java中用PrintStream向文件格式化输出需先通过FileOutputStream构造,再调用printf/format方法;推荐try-with-resources管理资源;注意编码乱码问题,可传Charset指定UTF-8;纯文本场景优先选PrintWriter。

Java 中用 PrintStream 向文件格式化输出数据,关键在于:先用 FileOutputStream 构造它,再用 printf 或 format 方法写入带格式的字符串。
创建 PrintStream 指向目标文件
不能直接传文件路径给 PrintStream 构造器(除非用 String 路径重载,但该构造器在 Java 11+ 已弃用)。推荐方式是通过 FileOutputStream 中转:
- 用
new FileOutputStream("output.txt")创建输出流,支持覆盖或追加(第二个参数设为true) - 把这个流传给
PrintStream构造器,例如:new PrintStream(new FileOutputStream("data.log")) - 建议使用 try-with-resources 自动关闭,避免资源泄漏
用 printf 写入格式化内容
PrintStream 继承了 PrintWriter 的格式化能力,支持 printf、format 和 print 等方法:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
-
ps.printf("姓名:%s,年龄:%d,分数:%.2f%n", name, age, score)—— 支持占位符和换行符%n -
ps.format("ID: %06d, 时间: %tF %tR%n", id, now, now)—— 支持日期、补零等高级格式 - 所有格式规则与
String.format()一致,可复用已有经验
注意编码与异常处理
默认使用平台编码,中文可能乱码。如需指定编码(如 UTF-8),应改用 OutputStreamWriter + PrintWriter 组合;但若坚持用 PrintStream,可在构造时传入 Charset:
立即学习“Java免费学习笔记(深入)”;
new PrintStream(new FileOutputStream("out.txt"), true, StandardCharsets.UTF_8)-
FileOutputStream本身不抛出检查异常,但构造时可能触发FileNotFoundException,需捕获或声明 - 写入过程一般不会抛异常(失败时内部设标志位),可用
checkError()主动检测
替代方案:PrintWriter 更适合文本场景
如果纯做文本格式化输出,PrintWriter 是更自然的选择:
- 构造方式类似:
new PrintWriter(new FileWriter("log.txt", true), true) - 支持自动刷新(第二个
true参数)、同名的printf方法 - 对字符编码控制更直接(
FileWriter可指定Charset,或搭配OutputStreamWriter)


















