Java - Anexar dados a um arquivo

Java - Anexar dados a um arquivo

1. Introdução

Neste tutorial rápido, veremos como usamos Java para anexar dados ao conteúdo de um arquivo - de algumas maneiras simples.

Vamos começar explicando como podemos fazer isso usandoFileWriter. do núcleo do Java

2. UsandoFileWriter

Aqui está um teste simples - ler um arquivo existente, anexar algum texto e, em seguida, certificar-se de que foi anexado corretamente:

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

Observe que o construtorFileWriter’s aceita uma marcaçãoboolean se quisermos acrescentar dados a um arquivo existente.

Se definirmos comofalse,, o conteúdo existente será substituído.

3. UsandoFileOutputStream

A seguir - vamos ver como podemos fazer a mesma operação - usandoFileOutputStream:

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

Da mesma forma, o construtorFileOutputStream aceita um booleano que deve ser definido como true para marcar que queremos acrescentar dados a um arquivo existente.

4. Usandojava.nio.file

Em seguida - também podemos anexar conteúdo a arquivos usando a funcionalidade emjava.nio.file - que foi introduzida no 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. Usando goiaba

Para começar a usar o Guava, precisamos adicionar sua dependência ao nossopom.xml:


    com.google.guava
    guava
    23.0

Agora, vamos ver como podemos começar a usar Guava para anexar conteúdo a um arquivo existente:

@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. Usando Apache Commons IOFileUtils

Finalmente - vamos ver como podemos anexar conteúdo a um arquivo existente usando Apache Commons IOFileUtils.

Primeiro, vamos adicionar a dependência IO do Apache Commons ao nossopom.xml:


    commons-io
    commons-io
    2.6

Agora, vamos ver um exemplo rápido que demonstra como anexar conteúdo a um arquivo existente usandoFileUtils:

@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. Conclusão

Neste artigo, vimos como podemos acrescentar conteúdo de várias maneiras.

A implementação completa deste tutorial pode ser encontradaover on GitHub.