Гуава - запись в файл, чтение из файла
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, поэтому его должно быть легко импортировать и запускать как есть.