Java - Ajouter des données à un fichier

Java - Ajouter des données à un fichier

1. introduction

Dans ce rapide didacticiel, nous verrons comment nous utilisons Java pour ajouter des données au contenu d'un fichier, de plusieurs manières simples.

Commençons par voir comment nous pouvons faire cela en utilisant lesFileWriter. de Java

2. Utilisation deFileWriter

Voici un test simple: lire un fichier existant, ajouter du texte, puis vérifier qu'il a été correctement ajouté:

@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");
}

Notez que le constructeurFileWriter’s accepte un marquageboolean si nous voulons ajouter des données à un fichier existant.

Si nous le définissons surfalse,, le contenu existant sera remplacé.

3. Utilisation deFileOutputStream

Ensuite - voyons comment nous pouvons faire la même opération - en utilisantFileOutputStream:

@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");
}

De même, le constructeurFileOutputStream accepte un booléen qui doit être défini sur true pour indiquer que nous voulons ajouter des données à un fichier existant.

4. Utilisation dejava.nio.file

Ensuite - nous pouvons également ajouter du contenu aux fichiers en utilisant la fonctionnalité dejava.nio.file - qui a été introduite dans JDK 7:

@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. Utilisation de goyave

Pour commencer à utiliser Guava, nous devons ajouter sa dépendance à nospom.xml:


    com.google.guava
    guava
    23.0

Voyons maintenant comment nous pouvons commencer à utiliser Guava pour ajouter du contenu à un fichier existant:

@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. Utilisation d'Apache Commons IOFileUtils

Enfin, voyons comment nous pouvons ajouter du contenu à un fichier existant à l'aide d'Apache Commons IOFileUtils.

Tout d'abord, ajoutons la dépendance Apache Commons IO à nospom.xml:


    commons-io
    commons-io
    2.6

Voyons maintenant un exemple rapide qui montre l'ajout de contenu à un fichier existant à l'aide deFileUtils:

@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. Conclusion

Dans cet article, nous avons vu comment nous pouvons ajouter du contenu de plusieurs manières.

L'implémentation complète de ce tutoriel peut être trouvéeover on GitHub.