Java: agregar datos a un archivo

1. Introducción

En este tutorial rápido, veremos cómo usamos Java para agregar datos al contenido de un archivo, de algunas formas simples.

Comencemos con cómo podemos hacer esto usando FileWriter del núcleo de Java .

2. Usando FileWriter

Aquí hay una prueba simple: leer un archivo existente, agregar algo de texto y luego asegurarse de que se haya agregado correctamente:

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

Tenga en cuenta que el constructor de FileWriter acepta una marca booleana si queremos agregar datos a un archivo existente.

Si lo configuramos como falso, se reemplazará el contenido existente.

3. Usando FileOutputStream

A continuación, veamos cómo podemos hacer la misma operación, usando 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"); }

De manera similar, el constructor FileOutputStream acepta un valor booleano que debe establecerse en verdadero para marcar que queremos agregar datos a un archivo existente.

4. Usando java.nio.file

A continuación, también podemos agregar contenido a archivos utilizando la funcionalidad en java.nio.file , que se introdujo en 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. Usar guayaba

Para comenzar a usar Guava, necesitamos agregar su dependencia a nuestro pom.xml :

 com.google.guava guava 23.0 

Ahora, veamos cómo podemos comenzar a usar Guava para agregar contenido a un archivo 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. Uso de Apache Commons IO FileUtils

Finalmente, veamos cómo podemos agregar contenido a un archivo existente usando Apache Commons IO FileUtils .

Primero, agreguemos la dependencia de IO de Apache Commons a nuestro pom.xml :

 commons-io commons-io 2.6 

Ahora, veamos un ejemplo rápido que demuestra cómo agregar contenido a un archivo existente usando 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. Conclusión

En este artículo, hemos visto cómo podemos agregar contenido de varias formas.

La implementación completa de este tutorial se puede encontrar en GitHub.