# Java 附加到文件

原文：http://zetcode.com/articles/javaappendtofile/

Java 附加到文件教程显示了如何用 Java 附加到文件。 我们使用`FileWriter`，`FileOutputStream`，`Files`，`RandomAccessFile`，Google Guava 和 Apache Commons IO。

附加到文件通常在日志记录中使用。

在示例中，我们将文本附加到文件中。

`towns.txt`

```java
Bratislava
Moldava
Košice
Trenčín
Prešov
Žilina

```

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

## Java 使用`FileWriter`附加到文件

`FileWriter`类用于编写字符流。 `FileWriter`采用可选的第二个参数：`append`。 如果设置为`true`，则数据将被写入文件末尾。

`JavaAppendFileFileWriter.java`

```java
package com.zetcode;

import java.io.FileWriter;
import java.io.IOException;

public class JavaAppendFileFileWriter {

    public static void main(String[] args) throws IOException {

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

        try (FileWriter fw = new FileWriter(fileName, true)) {

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

```

本示例使用`FileWriter`将数据附加到文件中。

## Java 用`FileOutputStream`附加到文件

`FileOutputStream`是用于将数据写入`File`或`FileDescriptor`的输出流。 它带有一个可选的第二个参数，该参数确定是否将数据附加到文件中。

`JavaAppendFileFileOutputStream.java`

```java
package com.zetcode;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class JavaAppendFileFileOutputStream {

    public static void main(String[] args) throws FileNotFoundException, IOException {

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

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

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

```

本示例使用`FileOutputStream`将数据附加到文件中。

## Java 使用`Files`附加到文件

Java 7 引入了`java.nio.file.Files`类，该类可用于轻松地将数据附加到文件中。

`JavaAppendFileFiles.java`

```java
package com.zetcode;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;

public class JavaAppendFileFiles {

    public static void main(String[] args) throws IOException {

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

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

        Files.write(Paths.get(fileName), tb, StandardOpenOption.APPEND);
    }
}

```

本示例将数据附加`Files`。

```java
Files.write(Paths.get(fileName), tb, StandardOpenOption.APPEND);

```

`Files.write()`的第三个参数表明如何打开文件进行写入。 使用`StandardOpenOption.APPEND`可以打开文件进行附加。

## Java 用`RandomAccessFile`附加到文件

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

`JavaAppendFileRandomAccessFile.java`

```java
package com.zetcode;

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;

public class JavaAppendFileRandomAccessFile {

    public static void main(String[] args) throws IOException {
        String fileName = "src/main/resources/towns.txt";

        File file = new File(fileName);

        try (RandomAccessFile raf = new RandomAccessFile(file, "rw")) {

            long length = raf.length();

            raf.setLength(length + 1);
            raf.seek(raf.length());
            raf.writeBytes("Žilina\n");
        }
    }
}

```

在此示例中，我们将数据附加`RandomAccessFile`。

## Java 用 Guava 附加到文件

我们可以使用 Guava 库将其附加到文件中。

```java
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>22.0</version>
</dependency>

```

我们需要这种 Guava 依赖。

`JavaAppendFileGuava.java`

```java
package com.zetcode;

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;

public class JavaAppendFileGuava {

    public static void main(String[] args) 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`类将其附加到文件中。

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

```

`Files.asCharSink()`的第三个参数指定文件写入模式； 使用`FileWriteMode.APPEND`选项打开文件进行写入。

## Java 使用 Apache Commons IO 附加到文件

在最后一个示例中，我们使用 Apache Commons IO 附加到文件。

```java
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.5</version>
</dependency>

```

我们需要这种依赖项。

`JavaAppendFileApacheCommons.java`

```java
package com.zetcode;

import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import org.apache.commons.io.FileUtils;

public class JavaAppendFileApacheCommons {

    public static void main(String[] args) throws IOException {

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

        File file = new File(fileName);

        FileUtils.writeStringToFile(file, "Žilina", StandardCharsets.UTF_8, true);
    }
}

```

我们使用`FileUtils.writeStringToFile()`方法将其附加到文件中。 最后一个`append`参数确定是否附加到文件。

在本教程中，我们展示了如何使用内置工具和第三方库在 Java 中附加文件。

您可能也对以下相关教程感兴趣： [Java 教程](/lang/java/)， [Java 列表目录内容](/articles/javalistdirectory/)， [Java `FileWriter`教程](/java/filewriter/)， [Java 文件时间](/articles/javafiletime/) ，[用 Java8 的`StringJoiner`连接字符串](/articles/java8stringjoiner/)，[Google Guava 简介](/articles/guava/)，[用 Java 过滤列表](/articles/javafilterlist/)或 [Android 教程](/mob/android/)。