Рубрики
Без рубрики

Как добавить текст в файл на Java

В этой статье показано, как включить режим добавления в следующих API-интерфейсах – Files.write, Files.WriteString и FileWriter.

Автор оригинала: mkyong.

В этой статье показано, как использовать следующие API Java для добавления текста в конец файла.

  1. Файлы.запись – Добавьте одну строку в файл, Java 7.
  2. – Добавьте одну строку в файл, Java 7. – Добавьте несколько строк в файл, Java 7, Java 8.
  3. Файлы.Запись – Ява 11.
  4. Файлообменник
  5. Поток вывода файла
  6. Файлы/| – Apache Commons IO.

В Java для API-интерфейсов NIO, таких как Files.write , мы можем использовать StandardOpenOption. ДОБАВЬТЕ , чтобы включить режим добавления. Для примеров:

	// append a string to the end of the file
	private static void appendToFile(Path path, String content)
		  throws IOException {

			Files.write(path,
							content.getBytes(StandardCharsets.UTF_8),
							StandardOpenOption.CREATE,
							StandardOpenOption.APPEND);

	}

Для классических API ввода-вывода, таких как файловый редактор или |/Поток вывода файла , мы можем передать true во второй аргумент конструктора, чтобы включить режим добавления. Для примеров:

	// append to the file
	try (FileWriter fw = new FileWriter(file, true);
       BufferedWriter bw = new BufferedWriter(fw)) {
      bw.write(content);
      bw.newLine();
  }

	// append to the file
	try (FileOutputStream fos = new FileOutputStream(file, true)) {
      fos.write(content.getBytes(StandardCharsets.UTF_8));
  }

1. Добавьте одну строку в файл – Files.write

Если файл не существует, API выдает исключение NoSuchFileException

	Files.write(path, content.getBytes(StandardCharsets.UTF_8),
	                StandardOpenOption.APPEND);

Лучшее решение всегда сочетает в себе стандартную опцию. СОЗДАТЬ и Стандартная опция. ДОБАВЛЯТЬ . Если файл не существует, API создаст и запишет текст в файл; если файл существует, добавьте текст в конец файла.

	Files.write(path, content.getBytes(StandardCharsets.UTF_8),
	                StandardOpenOption.CREATE,
	                StandardOpenOption.APPEND);

1.1 В приведенном ниже примере показано, как добавить одну строку в конец файла.

package com.mkyong.io.file;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;

public class FileAppend1 {

    private static final String NEW_LINE = System.lineSeparator();

    public static void main(String[] args) throws IOException {

        Path path = Paths.get("/home/mkyong/test/abc.txt");
        appendToFile(path, "hello world" + NEW_LINE);

    }

    // Java 7
    private static void appendToFile(Path path, String content)
				throws IOException {

        // if file not exists throws java.nio.file.NoSuchFileException
        /* Files.write(path, content.getBytes(StandardCharsets.UTF_8),
						StandardOpenOption.APPEND);*/

        // if file not exists, create and write to it
				// otherwise append to the end of the file
        Files.write(path, content.getBytes(StandardCharsets.UTF_8),
                StandardOpenOption.CREATE,
                StandardOpenOption.APPEND);

    }

}

Выход

Запустите 1-й раз.

hello world

Бегите 2-й раз.

hello world
hello world

2. Добавление нескольких строк в файл – Добавление нескольких строк в файл –

Files.write также поддерживает Повторяющийся интерфейс для нескольких строк, мы можем добавить Список в файл.

		// append lines of text
    private static void appendToFileJava8(Path path, List list)
			throws IOException {

        // Java 7?
        /*Files.write(path, list, StandardCharsets.UTF_8,
                StandardOpenOption.CREATE,
                StandardOpenOption.APPEND);*/

        // Java 8, default utf_8
        Files.write(path, list,
                StandardOpenOption.CREATE,
                StandardOpenOption.APPEND);

    }

3. Java 11 – Файлы.запись в режиме добавления.

В Java 7 нам нужно преобразовать Строку в байт[] и записать или добавить его в файл.

	String content = "...";

	Files.write(path, content.getBytes(StandardCharsets.UTF_8),
					StandardOpenOption.CREATE,
					StandardOpenOption.APPEND);

В Java 11 мы можем использовать новый Files.WriteString API для записи или добавления строки непосредственно в файл. Режим добавления работает таким же образом.

	// Java 11, writeString, append mode
  private static void appendToFileJava11(Path path, String content)
			throws IOException {

      // utf_8
      /*Files.writeString(path, content, StandardCharsets.UTF_8,
              StandardOpenOption.CREATE,
              StandardOpenOption.APPEND);*/

      // default StandardCharsets.UTF_8
      Files.writeString(path, content,
              StandardOpenOption.CREATE,
              StandardOpenOption.APPEND);
  }

4. Файлообменник

Для устаревших API ввода-вывода, таких как FileWriter , второй аргумент конструктора указывает режим добавления.

	// append
	// if file not exists, create and write
	// if the file exists, append to the end of the file
	try (FileWriter fw = new FileWriter(file, true);
			 BufferedWriter bw = new BufferedWriter(fw)) {

			bw.write(content);
			bw.newLine();   // add new line, System.lineSeparator()

	}

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

package com.mkyong.io.file;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class FileAppend4 {

	public static void main(String[] args) throws IOException {

			File file = new File("/home/mkyong/test/abc.txt");
			appendToFileFileWriter(file, "hello world");
			System.out.println("Done");

	}

	private static void appendToFileFileWriter(File file, String content)
			throws IOException {

			// default - create and write
			// if file not exists, create and write
			// if file exists, truncate and write
			/*try (FileWriter fw = new FileWriter(file);
					 BufferedWriter bw = new BufferedWriter(fw)) {
					bw.write(content);
					bw.newLine();
			}*/

			// append mode
			// if file not exists, create and write
			// if file exists, append to the end of the file
			try (FileWriter fw = new FileWriter(file, true);
					 BufferedWriter bw = new BufferedWriter(fw)) {

					bw.write(content);
					bw.newLine();   // add new line, System.lineSeparator()

			}

	}

}

4.2 Приведенный ниже пример добавляет Список или несколько строк в конец файла.

	private static void appendToFileFileWriter(
			File file, List content) throws IOException {

      try (FileWriter fw = new FileWriter(file, true);
           BufferedWriter bw = new BufferedWriter(fw)) {

          for (String s : content) {
              bw.write(s);
              bw.newLine();
          }
      }

  }

5. Поток вывода файла

Режим добавления FileOutputStream работает так же, как и Файловая программа .

	private static void appendToFileFileOutputStream(File file, String content)
			throws IOException {

      // append mode
      try (FileOutputStream fos = new FileOutputStream(file, true)) {
          fos.write(content.getBytes(StandardCharsets.UTF_8));
      }

  }

6. Файлы

В приведенном ниже примере используется популярный Apache commons-io Файлы.writeStringToFile для добавления строки в конец файла.

	
      commons-io
      commons-io
      2.7
  
import org.apache.commons.io.FileUtils;

    private static void appendToFileFileUtils(File file, String content)
			  throws IOException {

				// append mode
        FileUtils.writeStringToFile(
                file, content, StandardCharsets.UTF_8, true);

    }

Просмотрите файлы .writeStringToFile подпись; последний или четвертый аргумент указывает режим добавления.

	public static void writeStringToFile(final File file, final String data,
				final Charset charset,final boolean append)
				throws IOException {

      try (OutputStream out = openOutputStream(file, append)) {
          IOUtils.write(data, out, charset);
      }

  }

7. В старые добрые времена.

До Java 7 мы могли использовать файловый редактор для добавления текста в файл и закрытия ресурсов вручную.

package com.mkyong;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class ClassicBufferedWriterExample {

    public static void main(String[] args) {

        BufferedWriter bw = null;
        FileWriter fw = null;

        try {

            String content = "Hello";

            fw = new FileWriter("app.log", true);
            bw = new BufferedWriter(fw);
            bw.write(content);

        } catch (IOException e) {
            System.err.format("IOException: %s%n", e);
        } finally {
            try {
                if (bw != null)
                    bw.close();

                if (fw != null)
                    fw.close();
            } catch (IOException ex) {
                System.err.format("IOException: %s%n", ex);
            }
        }
    }
}

P.S. Приведенный выше код предназначен только для развлечения и устаревших целей, всегда придерживается метода “попробуй с ресурсами”, чтобы закрыть ресурсы.

Рекомендации

Оригинал: “https://mkyong.com/java/how-to-append-content-to-file-in-java/”