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を使用する

次に、JDK7で導入された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の使用を開始するには、その依存関係をpom.xmlに追加する必要があります。

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>31.0.1-jre</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. ApacheCommonsIOの使用FileUtils

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

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

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.11.0</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. 結論

この記事では、複数の方法でコンテンツを追加する方法を見てきました。

このチュートリアルの完全な実装は、GitHubにあります。