Java - Daten an eine Datei anhängen

1. Einleitung

In diesem kurzen Tutorial werden wir sehen, wie wir Java verwenden, um Daten an den Inhalt einer Datei anzuhängen - auf einige einfache Arten.

Beginnen wir damit, wie wir dies mit dem FileWriter von Core Java tun können.

2. Verwenden von FileWriter

Hier ist ein einfacher Test: Lesen einer vorhandenen Datei, Anhängen von Text und anschließendes Sicherstellen, dass dieser korrekt angehängt wurde:

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

Beachten Sie, dass der Konstruktor von FileWriter eine boolesche Markierung akzeptiert , wenn Daten an eine vorhandene Datei angehängt werden sollen.

Wenn wir den Wert auf false setzen, wird der vorhandene Inhalt ersetzt.

3. Verwenden von FileOutputStream

Als nächstes - mal sehen, wie wir den gleichen Vorgang ausführen können - mit 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"); }

In ähnlicher Weise akzeptiert der FileOutputStream- Konstruktor einen Booleschen Wert , der auf true gesetzt werden sollte, um zu markieren, dass Daten an eine vorhandene Datei angehängt werden sollen.

4. Verwenden von java.nio.file

Als Nächstes können wir mithilfe der Funktionen in java.nio.file, die in JDK 7 eingeführt wurden, auch Inhalte an Dateien anhängen :

@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. Verwenden von Guave

Um Guava verwenden zu können, müssen wir seine Abhängigkeit zu unserer pom.xml hinzufügen :

 com.google.guava guava 23.0 

Nun wollen wir sehen, wie wir Guava verwenden können, um Inhalte an eine vorhandene Datei anzuhängen:

@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. Verwenden von Apache Commons IO FileUtils

Lassen Sie uns abschließend sehen, wie wir mithilfe von Apache Commons IO FileUtils Inhalte an eine vorhandene Datei anhängen können .

Fügen wir zunächst die Apache Commons IO-Abhängigkeit zu unserer pom.xml hinzu :

 commons-io commons-io 2.6 

Schauen wir uns nun ein kurzes Beispiel an, das das Anhängen von Inhalten an eine vorhandene Datei mithilfe von FileUtils demonstriert :

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

In diesem Artikel haben wir gesehen, wie wir Inhalte auf verschiedene Arten anhängen können.

Die vollständige Implementierung dieses Tutorials finden Sie auf GitHub.