如何使用Java IO流进行文件的追加写入?

2 阅读1分钟

在 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();
        }
    }
}

六、总结(最简单记忆)

  1. 追加写入 = 构造流时第二个参数写 true
  2. FileOutputStream("a.txt", true) → 字节追加
  3. FileWriter("a.txt", true) → 字符追加
  4. 不加 true → 默认覆盖原文件