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

Java — добавление данных в файл

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

1. Введение

В этом кратком руководстве мы увидим, как мы используем Java для добавления данных к содержимому файла несколькими простыми способами.

Давайте начнем с того, как мы можем сделать это, используя FileWriter ядра Java.

2. Использование FileWriter

Вот простой тест — чтение существующего файла, добавление текста, а затем проверка правильности добавления:

@Test
public void whenAppendToFileUsingFileWriter_thenCorrect()
throws IOException {

FileWriter fw = new FileWriter(fileName, true);
BufferedWriter bw = new BufferedWriter(fw);
bw.write("Spain");
bw.newLine();
bw.close();

assertThat(getStringFromInputStream(
new FileInputStream(fileName)))
.isEqualTo("UK\r\n" + "US\r\n" + "Germany\r\n" + "Spain\r\n");
}

Обратите внимание, что конструктор FileWriter принимает логическую маркировку, если мы хотим добавить данные в существующий файл.

Если мы установим его в false, то существующий контент будет заменен.

3. Использование FileOutputStream

Далее — давайте посмотрим, как мы можем сделать ту же операцию — используя FileOutputStream :

@Test
public void whenAppendToFileUsingFileOutputStream_thenCorrect()
throws Exception {

FileOutputStream fos = new FileOutputStream(fileName, true);
fos.write("Spain\r\n".getBytes());
fos.close();

assertThat(StreamUtils.getStringFromInputStream(
new FileInputStream(fileName)))
.isEqualTo("UK\r\n" + "US\r\n" + "Germany\r\n" + "Spain\r\n");
}

Точно так же конструктор FileOutputStream принимает логическое значение, которое должно быть установлено в значение true, чтобы отметить, что мы хотим добавить данные в существующий файл.

4. Использование java.nio.file

Далее — мы также можем добавлять содержимое в файлы, используя функциональные возможности java.nio.file , которые были представлены в JDK 7:

@Test
public void whenAppendToFileUsingFiles_thenCorrect()
throws IOException {

String contentToAppend = "Spain\r\n";
Files.write(
Paths.get(fileName),
contentToAppend.getBytes(),
StandardOpenOption.APPEND);

assertThat(StreamUtils.getStringFromInputStream(
new FileInputStream(fileName)))
.isEqualTo("UK\r\n" + "US\r\n" + "Germany\r\n" + "Spain\r\n");
}

5. Использование гуавы

Чтобы начать использовать Guava, нам нужно добавить его зависимость в наш pom.xml :

<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.0.1-jre</version>
</dependency>

Теперь давайте посмотрим, как мы можем начать использовать Guava для добавления содержимого в существующий файл:

@Test
public void whenAppendToFileUsingFileWriter_thenCorrect()
throws IOException {

File file = new File(fileName);
CharSink chs = Files.asCharSink(
file, Charsets.UTF_8, FileWriteMode.APPEND);
chs.write("Spain\r\n");

assertThat(StreamUtils.getStringFromInputStream(
new FileInputStream(fileName)))
.isEqualTo("UK\r\n" + "US\r\n" + "Germany\r\n" + "Spain\r\n");
}

6. Использование Apache Commons IO FileUtils

Наконец — давайте посмотрим, как мы можем добавить содержимое в существующий файл, используя Apache Commons IO FileUtils .

Во-первых, давайте добавим зависимость ввода-вывода Apache Commons к нашему pom.xml :

<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>

Теперь давайте рассмотрим быстрый пример, демонстрирующий добавление содержимого в существующий файл с помощью FileUtils :

@Test
public void whenAppendToFileUsingFiles_thenCorrect()
throws IOException {
File file = new File(fileName);
FileUtils.writeStringToFile(
file, "Spain\r\n", StandardCharsets.UTF_8, true);

assertThat(StreamUtils.getStringFromInputStream(
new FileInputStream(fileName)))
.isEqualTo("UK\r\n" + "US\r\n" + "Germany\r\n" + "Spain\r\n");
}

7. Заключение

В этой статье мы увидели, как мы можем добавлять контент несколькими способами.

Полную реализацию этого руководства можно найти на GitHub .