Java - ファイルにデータを追加する

1前書き

このクイックチュートリアルでは、いくつかの簡単な方法で、ファイルのコンテンツにデータを追加するためのJavaの使用方法を説明します。

コアJava FileWriterを使用してこれを実行する方法から始めましょう。

2 FileWriter を使用する

これは簡単なテストです。既存のファイルを読み、テキストを追加してから、正しく追加されたことを確認します。

@Test
public void whenAppendToFileUsingFileWriter__thenCorrect()
  throws IOException {

    FileWriter fw = new FileWriter(fileName, true);
    BufferedWriter bw = new BufferedWriter(fw);
    bw.write("Spain");
    bw.newLine();
    bw.close();

    assertThat(getStringFromInputStream(
      new FileInputStream(fileName)))
      .isEqualTo("UK\r\n" + "US\r\n" + "Germany\r\n" + "Spain\r\n");
}

既存のファイルにデータを追加する場合、 FileWriterの コンストラクタは boolean マーキングを受け入れます。

  • これを false、 に設定すると、既存のコンテンツが置き換えられます。**

3 FileOutputStream を使用する

次に、 FileOutputStream を使用して、同じ操作を実行する方法を見てみましょう。

@Test
public void whenAppendToFileUsingFileOutputStream__thenCorrect()
 throws Exception {

    FileOutputStream fos = new FileOutputStream(fileName, true);
    fos.write("Spain\r\n".getBytes());
    fos.close();

    assertThat(StreamUtils.getStringFromInputStream(
      new FileInputStream(fileName)))
      .isEqualTo("UK\r\n" + "US\r\n" + "Germany\r\n" + "Spain\r\n");
}

同様に、 FileOutputStream コンストラクタは、既存のファイルにデータを追加することを示すためにtrueに設定する必要があるブール値を受け入れます。

4 java.nio.file を使用する

次に、JDK 7で導入された java.nio.file の機能を使用して、ファイルにコンテンツを追加することもできます。

@Test
public void whenAppendToFileUsingFiles__thenCorrect()
 throws IOException {

    String contentToAppend = "Spain\r\n";
    Files.write(
      Paths.get(fileName),
      contentToAppend.getBytes(),
      StandardOpenOption.APPEND);

    assertThat(StreamUtils.getStringFromInputStream(
      new FileInputStream(fileName)))
      .isEqualTo("UK\r\n" + "US\r\n" + "Germany\r\n" + "Spain\r\n");
}

5 Guava を使う

Guavaを使い始めるには、その依存関係を pom.xml に追加する必要があります。

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>23.0</version>
</dependency>

それでは、既存のファイルにコンテンツを追加するためにGuavaを使用する方法を見てみましょう。

@Test
public void whenAppendToFileUsingFileWriter__thenCorrect()
 throws IOException {

    File file = new File(fileName);
    CharSink chs = Files.asCharSink(
      file, Charsets.UTF__8, FileWriteMode.APPEND);
    chs.write("Spain\r\n");

    assertThat(StreamUtils.getStringFromInputStream(
      new FileInputStream(fileName)))
      .isEqualTo("UK\r\n" + "US\r\n" + "Germany\r\n" + "Spain\r\n");
}

6. Apache Commons IOの使い方 FileUtils

最後に、Apache Commons IOのFileUtilsを使って既存のファイルにコンテンツを追加する方法を見てみましょう。

まず、Apache Commons IOの依存関係を pom.xml に追加しましょう。

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>

それでは、 FileUtils を使用して既存のファイルにコンテンツを追加する方法を示す簡単な例を見てみましょう。

@Test
public void whenAppendToFileUsingFiles__thenCorrect()
 throws IOException {
    File file = new File(fileName);
    FileUtils.writeStringToFile(
      file, "Spain\r\n", StandardCharsets.UTF__8, true);

    assertThat(StreamUtils.getStringFromInputStream(
      new FileInputStream(fileName)))
      .isEqualTo("UK\r\n" + "US\r\n" + "Germany\r\n" + "Spain\r\n");
}

7. 結論

この記事では、コンテンツを複数の方法で追加する方法について説明しました。

このチュートリアルの完全な実装はhttps://github.com/eugenp/tutorials/tree/master/core-java-io[over on GitHub]にあります。