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.