Java - Добавить данные в файл

Java - Добавить данные в файл

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’s принимает маркировкуboolean, если мы хотим добавить данные в существующий файл.

Если мы установим его на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:


    com.google.guava
    guava
    23.0

Теперь давайте посмотрим, как мы можем начать использовать 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 IOFileUtils

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

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


    commons-io
    commons-io
    2.6

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

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

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