java中bufferedwriter配合filewriter实现追加写入,需在filewriter构造时传入true启用追加模式;缓存内容必须调用flush()或close()才能落盘,推荐关键操作后手动flush()并结合try-with-resources确保资源释放。

Java中使用BufferedWriter配合FileWriter实现追加写入,关键在于构造FileWriter时传入true作为第二个参数,启用追加模式;而缓存刷盘则需主动调用flush()或close()。
构造 FileWriter 时开启追加模式
FileWriter默认会覆盖文件内容。要追加写入,必须在创建实例时显式指定append = true:
-
new FileWriter("log.txt", true):以追加方式打开文件,光标定位到末尾 - 若省略该参数或传
false,每次新建FileWriter都会清空原文件 - 注意:即使启用了追加,仍需通过
BufferedWriter写入内容,否则不会真正落盘
用 BufferedWriter 包装并控制缓存行为
BufferedWriter本身不决定是否追加,它只是对底层Writer(这里是FileWriter)做缓冲封装。它的作用是提升写入效率,并提供flush()和newLine()等便利方法:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 推荐写法:
BufferedWriter bw = new BufferedWriter(new FileWriter("data.txt", true)) - 每次调用
bw.write()或bw.append()都只写入内存缓冲区,不立即落盘 - 必须显式调用
bw.flush()才能将缓冲区内容强制写入磁盘 -
bw.close()会自动调用flush()再关闭流,但不能依赖它来实时同步(比如日志场景)
确保数据及时刷盘的常见做法
追加写入常用于日志、记录类场景,需避免因JVM退出或异常导致缓冲区丢失数据:
- 每写完一条关键记录后调用
bw.flush(),例如:bw.write("INFO: start"); bw.flush(); - 避免仅靠
close()刷盘——如果程序中途崩溃,未close()则缓冲区内容永久丢失 - 可结合
try-with-resources保证正常关闭,但仍建议在关键点手动flush() - 注意:频繁
flush()会降低性能,需权衡实时性与吞吐量
完整示例代码
以下是一个安全追加写入并及时刷盘的典型用法:
try (BufferedWriter bw = new BufferedWriter(new FileWriter("output.log", true))) {
bw.write("[" + System.currentTimeMillis() + "] Task completed");
bw.newLine();
bw.flush(); // 确保立刻写入磁盘
} catch (IOException e) {
e.printStackTrace();
}
这段代码确保每次写入后都刷新缓冲区,同时利用自动资源管理防止流泄露。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










