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]にあります。