ZetCode

Java 追加到文件

上次修改时间:2024 年 7 月 4 日

在本文中,我们将展示如何在 Java 中追加到文件。我们使用 FileWriterFileOutputStreamFilesRandomAccessFile 和 Google Guava。

追加到文件通常用于日志记录。

在示例中,我们将文本追加到文件中。

towns.txt
Bratislava
Moldava
Košice
Trenčín
Prešov

我们使用此文本文件。它位于 src/main/resources 目录中。

使用 FileWriter 追加到文件

FileWriter 类用于写入字符流。FileWriter 接受一个可选的第二个参数:append。如果设置为 true,则数据将被写入到文件末尾。

Main.java
import java.io.FileWriter;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

void main() throws IOException {

    String fileName = "src/main/resources/towns.txt";

    try (var fw = new FileWriter(fileName, StandardCharsets.UTF_8, true)) {

        fw.append("Žilina\n");
    }
}

此示例使用 FileWriter 将数据追加到文件。

try (var fw = new FileWriter(fileName, StandardCharsets.UTF_8, true)) {

    fw.append("Žilina\n");
}

我们定义 FileWriter 并使用其 append 方法。

使用 FileOutputStream 追加到文件

FileOutputStream 是一个用于将数据写入 FileFileDescriptor 的输出流。它接受一个可选的第二个参数,该参数确定数据是否追加到文件。

Main.java
import java.io.FileOutputStream;
import java.io.IOException;

void main() throws IOException {

    String fileName = "src/main/resources/towns.txt";

    byte[] tb = "Žilina\n".getBytes();

    try (var fos = new FileOutputStream(fileName, true)) {
        fos.write(tb);
    }
}

此示例使用 FileOutputStream 将数据追加到文件。

try (var fos = new FileOutputStream(fileName, true)) {
    fos.write(tb);
}

我们创建一个 FileOutputStream 的实例,并将 append 参数设置为 true,并使用其 write 方法。

使用 Files 追加到文件

java.nio.file.Files 类是一个方便的类,可以轻松地将数据追加到文件。

Main.java
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;

void main() throws IOException {

    String fileName = "src/main/resources/towns.txt";

    String town = "Žilina\n";
    Files.writeString(Paths.get(fileName), town, StandardCharsets.UTF_8,
        StandardOpenOption.APPEND);
}

此示例使用 Files 追加数据。

Files.writeString(Paths.get(fileName), town, StandardCharsets.UTF_8,
    StandardOpenOption.APPEND);

Files.writeString 的第四个参数告诉我们如何打开文件进行写入。使用 StandardOpenOption.APPEND,文件已打开以进行追加。

使用 RandomAccessFile 追加到文件

RandomAccessFile 用于读取和写入随机访问文件。

Main.java
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.charset.StandardCharsets;

void main() throws IOException {

    String fileName = "src/main/resources/towns.txt";

    var file = new File(fileName);
    var town = "Žilina\n";

    try (var raf = new RandomAccessFile(file, "rw")) {
        
        raf.seek(raf.length());
        raf.write(town.getBytes(StandardCharsets.UTF_8));
    }
}

在此示例中,我们使用 RandomAccessFile 追加数据。

raf.seek(raf.length());
raf.write(town.getBytes(StandardCharsets.UTF_8));

我们确定文件的长度,定位到文件末尾,并写入字节。

使用 Guava 追加到文件

我们可以使用 Guava 库来追加到文件。

implementation 'com.google.guava:guava:33.2.1-jre'

我们需要 Guava 依赖项。

Main.java
import com.google.common.base.Charsets;
import com.google.common.io.CharSink;
import com.google.common.io.FileWriteMode;
import com.google.common.io.Files;
import java.io.File;
import java.io.IOException;

void main() throws IOException {

    String fileName = "src/main/resources/towns.txt";

    File file = new File(fileName);

    CharSink chs = Files.asCharSink(file, Charsets.UTF_8, FileWriteMode.APPEND);
    chs.write("Žilina\n");
}

在该示例中,我们使用 Guava 的 CharSink 类追加到文件。

CharSink chs = Files.asCharSink(file, Charsets.UTF_8, FileWriteMode.APPEND);

Files.asCharSink 的第三个参数指定文件写入模式;使用 FileWriteMode.APPEND 选项,该文件被打开以进行写入。

来源

Java 基础 I/O - 教程

在本文中,我们展示了如何使用内置工具和 Guava 库在 Java 中追加到文件。

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。到目前为止,我已经撰写了超过 1,400 篇文章和 8 本电子书。我拥有超过十年的编程教学经验。

列出所有Java教程