Гуава - запись в файл, чтение из файла

Гуава - запись в файл, чтение из файла

1. обзор

В этом руководстве мы узнаем, как писать в файл, а затем как читать из файла с помощьюGuava IO. Мы обсудим, как записать в файл.

2. Запись с использованиемFiles

Начнем с простого примера записиString в файл с помощьюFiles:

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

Обратите внимание, что мы также можемappend to an existing file, используя APIFiles.append().

3. Запись в файл с использованиемCharSink

Далее - давайте посмотрим, как записатьString в файл с помощьюCharSink. В следующем примере - мы получаемCharSink из файла, используяFiles.asCharSink(), а затем используем его для записи:

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

Мы также можем использоватьCharSink для записи нескольких строк в файл. В следующем примере мы пишемList имен и используем пробел в качестве разделителя строк:

@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. Запись в файл с использованиемByteSink

Мы также можем записывать необработанные байты, используяByteSink. В следующем примере мы получаемByteSink из файла, используяFiles.asByteSink(), а затем используем его для записи:

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

Обратите внимание, что мы можем перемещаться междуByteSink иCharSink, используя простое преобразованиеbyteSink.asCharSink().

5. Чтение из файла с использованиемFiles

Далее - давайте обсудим, как читать из файла с помощью файлов.

В следующем примере - мы читаем все содержимое файла, используя простойFiles.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);
}

Мы также можем прочитать файл вList строк, как в следующем примере:

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

Обратите внимание, что мы можем использоватьFiles.readFirstLine() для чтения только первой строки файла.

6. Чтение из файла с использованиемCharSource

Далее - давайте посмотрим, как читать из файла с помощью Charsource.

В следующем примере мы получаемCharSource из файла с помощьюFiles.asCharSource(), а затем используем его для чтения всего содержимого файла с помощьюread():

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

Мы также можем объединить два CharSource и использовать их как одинCharSource.

В следующем примере мы читаем два файла, первый из которых содержит «Hello world», а другой - «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. Чтение из файла с использованиемCharStreams

Теперь - давайте посмотрим, как прочитать содержимое файла вString, используяCharStreams, через посредникаFileReader:

@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. Чтение из файла с использованиемByteSource

Мы можем использоватьByteSource для содержимого файла в необработанном байтовом формате - как в следующем примере:

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

Мы также можемstart reading bytes after specific offset, используяslice(), как в следующем примере:

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

Обратите внимание, что мы можем использоватьbyteSource.asCharSource(), чтобы получить представлениеCharSource об этомByteSource. __

9. Чтение из файла с использованиемByteStreams

Далее - давайте посмотрим, как считывать содержимое файла в необработанный массив байтов с помощьюByteStreams; мы будем использовать промежуточныйFileInputStream для выполнения преобразования:

@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. Читать с использованиемResources

Наконец, давайте посмотрим, как читать файлы, существующие в пути к классам, с помощью утилитыResources, как в следующем примере:

@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. Заключение

В этом кратком руководстве мы проиллюстрировали различные способы поддержки и утилитread and write Files using the Guava IO.

Реализация всех этих примеров и фрагментов кодаcan be found in my Guava github project - это проект на основе Eclipse, поэтому его должно быть легко импортировать и запускать как есть.