Java - Daten an eine Datei anhängen

Java - Daten an eine Datei anhängen

1. Einführung

In diesem kurzen Tutorial erfahren Sie auf einfache Weise, wie wir mithilfe von Java Daten an den Inhalt einer Datei anhängen.

Beginnen wir damit, wie wir dies mitFileWriter.von Java tun können

2. Verwenden vonFileWriter

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 vonFileWriter’sdie Markierung vonbooleanakzeptiert, wenn Daten an eine vorhandene Datei angehängt werden sollen.

Wenn wir es auffalse, setzen, wird der vorhandene Inhalt ersetzt.

3. Verwenden vonFileOutputStream

Als nächstes sehen wir uns an, wie wir dieselbe Operation ausführen können - mitFileOutputStream:

@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 KonstruktorFileOutputStreameinen Booleschen Wert, der auf true gesetzt werden sollte, um zu markieren, dass Daten an eine vorhandene Datei angehängt werden sollen.

4. Verwenden vonjava.nio.file

Als Nächstes können wir Inhalte mithilfe der Funktionalität injava.nio.file an Dateien anhängen, die in JDK 7 eingeführt wurde:

@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. Mit Guave

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


    com.google.guava
    guava
    23.0

Lassen Sie uns nun 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 IOFileUtils

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

Fügen wir zunächst die Apache Commons-E / A-Abhängigkeit zu unserenpom.xmlhinzu:


    commons-io
    commons-io
    2.6

Sehen wir uns nun ein kurzes Beispiel an, das das Anhängen von Inhalten an eine vorhandene Datei mitFileUtilszeigt:

@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 inover on GitHub.