Перейти к основному содержимому

Java — запись программы чтения в файл

· 2 мин. чтения

Задача: Сумма двух чисел

Напишите функцию twoSum. Которая получает массив целых чисел nums и целую сумму target, а возвращает индексы двух чисел, сумма которых равна target. Любой набор входных данных имеет ровно одно решение, и вы не можете использовать один и тот же элемент дважды. Ответ можно возвращать в любом порядке...

ANDROMEDA

В этом кратком руководстве мы собираемся записать содержимое Reader в файл , используя обычную Java, затем Guava и, наконец, библиотеку ввода-вывода Apache Commons.

Эта статья является частью серии «Java — Back to Basic» здесь, на ForEach.

1. С Java

Начнем с простого решения Java :

@Test
public void givenUsingPlainJava_whenWritingReaderContentsToFile_thenCorrect()
throws IOException {
Reader initialReader = new StringReader("Some text");

int intValueOfChar;
StringBuilder buffer = new StringBuilder();
while ((intValueOfChar = initialReader.read()) != -1) {
buffer.append((char) intValueOfChar);
}
initialReader.close();

File targetFile = new File("src/test/resources/targetFile.txt");
targetFile.createNewFile();

Writer targetFileWriter = new FileWriter(targetFile);
targetFileWriter.write(buffer.toString());
targetFileWriter.close();
}

Во-первых, мы читаем содержимое Reader в строку; тогда мы просто записываем строку в файл.

2. С гуавой

Решение Guava проще — теперь у нас есть API для записи считывателя в файл:

@Test
public void givenUsingGuava_whenWritingReaderContentsToFile_thenCorrect()
throws IOException {
Reader initialReader = new StringReader("Some text");

File targetFile = new File("src/test/resources/targetFile.txt");
com.google.common.io.Files.touch(targetFile);
CharSink charSink = com.google.common.io.Files.
asCharSink(targetFile, Charset.defaultCharset(), FileWriteMode.APPEND);
charSink.writeFrom(initialReader);

initialReader.close();
}

3. С Apache Commons IO

И, наконец, решение Commons IO — также использующее API более высокого уровня для чтения данных из Reader и записи этих данных в файл:

@Test
public void givenUsingCommonsIO_whenWritingReaderContentsToFile_thenCorrect()
throws IOException {
Reader initialReader = new CharSequenceReader("CharSequenceReader extends Reader");

File targetFile = new File("src/test/resources/targetFile.txt");
FileUtils.touch(targetFile);
byte[] buffer = IOUtils.toByteArray(initialReader);
FileUtils.writeByteArrayToFile(targetFile, buffer);

initialReader.close();
}

Вот и все — 3 простых решения для записи содержимого Reader в File . Обязательно ознакомьтесь с образцом на GitHub .