Guava - In Datei schreiben, Aus Datei lesen

Guave - In Datei schreiben, aus Datei lesen

1. Überblick

In diesem Tutorial lernen wir, wie man in eine Datei schreibt und dann mitGuava IO aus einer Datei liest. Wir werden diskutieren, wie man in eine Datei schreibt.

2. Schreiben Sie mitFiles

Beginnen wir mit einem einfachen Beispiel, umString mitFiles in eine Datei zu schreiben:

@Test
public void whenWriteUsingFiles_thenWritten() throws IOException {
    String expectedValue = "Hello world";
    File file = new File("test.txt");
    Files.write(expectedValue, file, Charsets.UTF_8);
    String result = Files.toString(file, Charsets.UTF_8);
    assertEquals(expectedValue, result);
}

Beachten Sie, dass wir auchappend to an existing file mit derFiles.append()-API verwenden können.

3. Schreiben Sie mitCharSink in eine Datei

Weiter - sehen wir uns an, wie Sie mitCharSinkString in eine Datei schreiben. Im folgenden Beispiel erhalten wir mitFiles.asCharSink() einCharSink aus einer Datei und verwenden es dann zum Schreiben:

@Test
public void whenWriteUsingCharSink_thenWritten() throws IOException {
    String expectedValue = "Hello world";
    File file = new File("test.txt");
    CharSink sink = Files.asCharSink(file, Charsets.UTF_8);
    sink.write(expectedValue);

    String result = Files.toString(file, Charsets.UTF_8);
    assertEquals(expectedValue, result);
}

Wir können auchCharSink verwenden, um mehrere Zeilen in eine Datei zu schreiben. Im folgenden Beispiel schreiben wirList von Namen und verwenden ein Leerzeichen als Zeilentrennzeichen:

@Test
public void whenWriteMultipleLinesUsingCharSink_thenWritten() throws IOException {
    List names = Lists.newArrayList("John", "Jane", "Adam", "Tom");
    File file = new File("test.txt");
    CharSink sink = Files.asCharSink(file, Charsets.UTF_8);
    sink.writeLines(names, " ");

    String result = Files.toString(file, Charsets.UTF_8);
    String expectedValue = Joiner.on(" ").join(names);
    assertEquals(expectedValue, result.trim());
}

4. Schreiben Sie mitByteSink in eine Datei

Wir können auch Rohbytes mitByteSink schreiben. Im folgenden Beispiel erhalten wir mitFiles.asByteSink() einByteSink aus einer Datei und verwenden es dann zum Schreiben:

@Test
public void whenWriteUsingByteSink_thenWritten() throws IOException {
    String expectedValue = "Hello world";
    File file = new File("test.txt");
    ByteSink sink = Files.asByteSink(file);
    sink.write(expectedValue.getBytes());

    String result = Files.toString(file, Charsets.UTF_8);
    assertEquals(expectedValue, result);
}

Beachten Sie, dass wir mit der einfachen KonvertierungbyteSink.asCharSink() zwischenByteSink undCharSink wechseln können.

5. Aus der Datei mitFiles lesen

Weiter - Lassen Sie uns diskutieren, wie Sie mithilfe von Dateien aus einer Datei lesen.

Im folgenden Beispiel lesen wir den gesamten Inhalt einer Datei mit den einfachenFiles.toString():

@Test
public void whenReadUsingFiles_thenRead() throws IOException {
    String expectedValue = "Hello world";
    File file = new File("test.txt");
    String result = Files.toString(file, Charsets.UTF_8);

    assertEquals(expectedValue, result);
}

Wir können die Datei auch inList Zeilen lesen, wie im folgenden Beispiel:

@Test
public void whenReadMultipleLinesUsingFiles_thenRead() throws IOException {
    File file = new File("test.txt");
    List result = Files.readLines(file, Charsets.UTF_8);

    assertThat(result, contains("John", "Jane", "Adam", "Tom"));
}

Beachten Sie, dass wirFiles.readFirstLine() verwenden können, um nur die erste Zeile einer Datei zu lesen.

6. Aus der Datei mitCharSource lesen

Weiter - sehen wir uns an, wie Sie mit Charsource aus einer Datei lesen.

Im folgenden Beispiel erhalten wir einCharSource aus einer Datei mitFiles.asCharSource() und verwenden es dann, um den gesamten Dateiinhalt mitread() zu lesen:

@Test
public void whenReadUsingCharSource_thenRead() throws IOException {
    String expectedValue = "Hello world";
    File file = new File("test.txt");
    CharSource source = Files.asCharSource(file, Charsets.UTF_8);

    String result = source.read();
    assertEquals(expectedValue, result);
}

Wir können auch zwei CharSources verketten und als einCharSource verwenden.

Im folgenden Beispiel lesen wir zwei Dateien, die erste enthält „Hello world“ und die andere enthält „Test“:

@Test
public void whenReadMultipleCharSources_thenRead() throws IOException {
    String expectedValue = "Hello worldTest";
    File file1 = new File("test1.txt");
    File file2 = new File("test2.txt");

    CharSource source1 = Files.asCharSource(file1, Charsets.UTF_8);
    CharSource source2 = Files.asCharSource(file2, Charsets.UTF_8);
    CharSource source = CharSource.concat(source1, source2);

    String result = source.read();
    assertEquals(expectedValue, result);
}

7. Aus der Datei mitCharStreams lesen

Nun wollen wir sehen, wie Sie den Inhalt einer Datei mitCharStreams über einen VermittlerFileReader inString einlesen können:

@Test
public void whenReadUsingCharStream_thenRead() throws IOException {
    String expectedValue = "Hello world";
    FileReader reader = new FileReader("test.txt");
    String result = CharStreams.toString(reader);

    assertEquals(expectedValue, result);
    reader.close();
}

8. Aus der Datei mitByteSource lesen

Wir könnenByteSource für den Dateiinhalt im Rohbyte-Format verwenden - wie im folgenden Beispiel:

@Test
public void whenReadUsingByteSource_thenRead() throws IOException {
    String expectedValue = "Hello world";
    File file = new File("test.txt");
    ByteSource source = Files.asByteSource(file);

    byte[] result = source.read();
    assertEquals(expectedValue, new String(result));
}

Wir können auchstart reading bytes after specific offset mitslice() wie im folgenden Beispiel verwenden:

@Test
public void whenReadAfterOffsetUsingByteSource_thenRead() throws IOException {
    String expectedValue = "lo world";
    File file = new File("test.txt");
    long offset = 3;
    long len = 1000;

    ByteSource source = Files.asByteSource(file).slice(offset, len);
    byte[] result = source.read();
    assertEquals(expectedValue, new String(result));
}

Beachten Sie, dass wirbyteSource.asCharSource() verwenden können, um eineCharSource-Ansicht dieserByteSource zu erhalten. __

9. Aus der Datei mitByteStreams lesen

Weiter - sehen wir uns an, wie der Inhalt einer Datei mitByteStreams in ein Rohbyte-Array eingelesen wird. Wir werden einen IntermediärFileInputStream verwenden, um die Konvertierung durchzuführen:

@Test
public void whenReadUsingByteStream_thenRead() throws IOException {
    String expectedValue = "Hello world";
    FileInputStream reader = new FileInputStream("test.txt");
    byte[] result = ByteStreams.toByteArray(reader);
    reader.close();

    assertEquals(expectedValue, new String(result));
}

10. Lesen Sie mitResources

Lassen Sie uns abschließend anhand des DienstprogrammsResourceswie im folgenden Beispiel sehen, wie Dateien gelesen werden, die im Klassenpfad vorhanden sind:

@Test
public void whenReadUsingResources_thenRead() throws IOException {
    String expectedValue = "Hello world";
    URL url = Resources.getResource("test.txt");
    String result = Resources.toString(url, Charsets.UTF_8);

    assertEquals(expectedValue, result);
}

11. Fazit

In diesem kurzen Tutorial haben wir die verschiedenen Möglichkeiten für den Support und die Dienstprogramme vonread and write Files using the Guava IOveranschaulicht.

Die Implementierung all dieser Beispiele und Codefragmentecan be found in my Guava github project - dies ist ein Eclipse-basiertes Projekt, daher sollte es einfach zu importieren und auszuführen sein, wie es ist.