formatter 本身不输出,需指定 appendable 目标;format() 不自动换行或刷新,须用 %n、flush() 或 try-with-resources 确保正确输出。
Java 中 Formatter 类本身不直接提供“格式化输出”功能,它只负责格式化字符串;真正完成输出的是配合它的目标(比如 System.out、StringBuilder 或文件流)。误以为调用 Formatter 构造方法就自动打印,是新手最常踩的坑。
Formatter 构造时必须指定输出目标
Formatter 是一个“写入器”,不是“打印机”。它需要一个 Appendable 实例来写入格式化后的内容。没指定目标,或目标为 null,会抛 NullPointerException;目标不可写(如只读流),会抛 IOException。
常见合法目标:
-
new Formatter(System.out)—— 输出到控制台(但通常更推荐用System.out.printf()) -
new Formatter(sb),其中sb是StringBuilder—— 写入可变字符串 -
new Formatter(new File("out.txt"))—— 写入文件(需处理FileNotFoundException) -
new Formatter(ByteArrayOutputStream)—— 写入字节流,适合后续编码处理
format() 方法不会自动刷新或换行
调用 formatter.format("%d %s", 42, "hello") 只是把内容写入目标,不会追加 \n,也不会触发缓冲区刷新(尤其对文件或管道流)。这会导致:
立即学习“Java免费学习笔记(深入)”;