Goyave - Écrire dans un fichier, lire à partir d’un fichier

Goyave - écrire dans un fichier, lire à partir d'un fichier

1. Vue d'ensemble

Dans ce didacticiel, nous allons apprendre à écrire dans un fichier, puis à lire à partir d'un fichier en utilisantGuava IO. Nous discuterons comment écrire dans un fichier.

2. Écrire en utilisantFiles

Commençons par un exemple simple pour écrire unString dans un fichier en utilisantFiles:

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

Notez que nous pouvons aussiappend to an existing file en utilisant l'APIFiles.append().

3. Écrire dans un fichier en utilisantCharSink

Ensuite, voyons comment écrire unString dans un fichier en utilisantCharSink. Dans l'exemple suivant - nous obtenons unCharSink d'un fichier en utilisantFiles.asCharSink() puis l'utilisons pour écrire:

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

Nous pouvons également utiliserCharSink pour écrire plusieurs lignes dans un fichier. Dans l'exemple suivant - nous écrivons unList de noms et nous utilisons un espace comme séparateur de ligne:

@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. Écrire dans un fichier en utilisantByteSink

Nous pouvons également écrire des octets bruts en utilisantByteSink. Dans l'exemple suivant - nous obtenons unByteSink d'un fichier en utilisantFiles.asByteSink() puis l'utilisons pour écrire:

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

Notez que nous pouvons nous déplacer entre unByteSink et unCharSink en utilisant la simple conversionbyteSink.asCharSink().

5. Lire à partir d'un fichier à l'aide deFiles

Ensuite, voyons comment lire un fichier à l'aide de fichiers.

Dans l'exemple suivant - nous lisons tout le contenu d'un fichier en utilisant les simplesFiles.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);
}

Nous pouvons également lire le fichier en unList de lignes comme dans l'exemple suivant:

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

Notez que nous pouvons utiliserFiles.readFirstLine() pour lire uniquement la première ligne d'un fichier.

6. Lire à partir d'un fichier à l'aide deCharSource

Ensuite, voyons comment lire un fichier à l'aide de Charsource.

Dans l'exemple suivant - nous obtenons unCharSource d'un fichier en utilisantFiles.asCharSource() puis l'utilisons pour lire tout le contenu du fichier en utilisantread():

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

Nous pouvons également concaténer deux CharSources et les utiliser comme unCharSource.

Dans l'exemple suivant - nous lisons deux fichiers, le premier contient «Hello world» et l'autre contient «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. Lire à partir d'un fichier à l'aide deCharStreams

Voyons maintenant comment lire le contenu d'un fichier dans unString en utilisantCharStreams, via un intermédiaireFileReader:

@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. Lire à partir d'un fichier à l'aide deByteSource

Nous pouvons utiliserByteSource pour le contenu du fichier au format octet brut - comme dans l'exemple suivant:

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

On peut aussistart reading bytes after specific offset en utilisantslice() comme dans l'exemple suivant:

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

Notez que nous pouvons utiliserbyteSource.asCharSource() pour obtenir une vueCharSource de ceByteSource. __

9. Lire à partir d'un fichier à l'aide deByteStreams

Ensuite, voyons comment lire le contenu d’un fichier dans un tableau d’octets bruts en utilisantByteStreams; nous utiliserons un intermédiaireFileInputStream pour effectuer la conversion:

@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. Lire avecResources

Enfin - voyons comment lire les fichiers qui existent sur le chemin de classe - en utilisant l'utilitaireResources comme dans l'exemple suivant:

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

Dans ce rapide tutoriel, nous avons illustré les différentes manières de prendre en charge et utilitairesread and write Files using the Guava IO.

L'implémentation de tous ces exemples et extraits de codecan be found in my Guava github project - il s'agit d'un projet basé sur Eclipse, il devrait donc être facile à importer et à exécuter tel quel.