在 Java IO 里实现文件追加写入,非常简单,只需要在构造流的时候,第二个参数传 true 就可以了。
我分字节流和字符流两种方式讲,都是标准、可直接运行的代码。
一、核心一句话
java
运行
new FileOutputStream("文件路径", true); // 追加模式
new FileWriter("文件路径", true); // 追加模式
true= 追加写入(不清空原有内容,在后面续写)- 不传 / 传
false= 覆盖写入(原有内容会被清空)
二、字节流追加写入(万能,适合所有文件)
java
运行
import java.io.FileOutputStream;
import java.io.IOException;
public class AppendByte {
public static void main(String[] args) {
// 第二个参数 true = 追加模式
try (FileOutputStream fos = new FileOutputStream("test.txt", true)) {
String content = "\n这是追加的内容!";
fos.write(content.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
}
三、字符流追加写入(适合文本,更常用)
java
运行
import java.io.FileWriter;
import java.io.IOException;
public class AppendWriter {
public static void main(String[] args) {
// true = 追加
try (FileWriter fw = new FileWriter("test.txt", true)) {
fw.write("\n我是追加的一行文字");
} catch (IOException e) {
e.printStackTrace();
}
}
}
四、带缓冲的高效追加写入(开发推荐)
java
运行
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class AppendBuffered {
public static void main(String[] args) {
try (BufferedWriter bw = new BufferedWriter(new FileWriter("log.txt", true))) {
bw.write("2025-04-09 系统启动");
bw.newLine(); // 换行
bw.write("2025-04-09 用户登录");
} catch (IOException e) {
e.printStackTrace();
}
}
}
五、指定 UTF-8 编码追加(避免乱码)
java
运行
import java.io.*;
public class AppendUtf8 {
public static void main(String[] args) {
try (
OutputStreamWriter osw = new OutputStreamWriter(
new FileOutputStream("test.txt", true), "UTF-8"
);
BufferedWriter bw = new BufferedWriter(osw)
) {
bw.write("\nUTF-8 追加内容");
} catch (IOException e) {
e.printStackTrace();
}
}
}
六、总结(最简单记忆)
- 追加写入 = 构造流时第二个参数写
true FileOutputStream("a.txt", true)→ 字节追加FileWriter("a.txt", true)→ 字符追加- 不加
true→ 默认覆盖原文件