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

Java создает и записывает в файл

В этой статье показано, как использовать “Files.write” для создания и записи текста в файл.

В Java мы можем использовать Files.write для создания и записи в файл.

	String content = "...";
	Path path = Paths.get("/home/mkyong/test.txt");

	// string -> bytes
	Files.write(path, content.getBytes(StandardCharsets.UTF_8));

Files.write также принимает Итерируемый интерфейс ; это означает, что этот API может записывать Список в файл.

	List list = Arrays.asList("a", "b", "c");
	Files.write(path, list);

Краткая история До Java 7 для записи байтов (изображения) в файл мы использовали FileOutputStream ; для записи символов (текста) в файл мы используем Файловый редактор , и обычно завернутый в буферизованный файл для повышения производительности.

  • В Java 7 появился новый класс NIO с именем java.nio.file. Файлы , и мы можем использовать Files.write() для записи как байтов, так и символов.
  • В Java 8 мы можем использовать Files.newbufferedwriter(путь) для создания BufferedWriter .
  • В Java 11 появился новый Files.WriteString API для записи строки непосредственно в файл.

1. Создание и запись в файл – Создание и запись в файл –

1.1 До Java 7 мы можем использовать классический Файловый редактор и БуферизоВанный редактор для записи текста в файл.

	try (FileWriter fw = new FileWriter(file);
       BufferedWriter bw = new BufferedWriter(fw)) {
      bw.write(content);
      bw.newLine();
  }

В Java 7 и выше мы можем использовать одну строку Files.write для записи текста в файл, и мы также не беспокоимся о закрытии открытого ресурса (файла), потому что Files.write автоматически закроет открытый ресурс.

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

1.2 В приведенном ниже примере используется Файлы.запись для создания и записи Строка в файл.

package com.mkyong.io.file;

import java.io.*;
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;
import java.util.List;

public class FileWrite {

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

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

        Path path = Paths.get("/home/mkyong/test/aaa.txt");
        writeFile(path, "Hello World 1" + NEW_LINE);

    }

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

        // file does not exist, create and write it
        // if the file exists, override the content
        Files.write(path, content.getBytes(StandardCharsets.UTF_8));

        // Append mode
        // if the file exists, append string to the end of file.
        // Files.write(path, content.getBytes(StandardCharsets.UTF_8),
				//	StandardOpenOption.CREATE, StandardOpenOption.APPEND);

        // if file does not exist, throws NoSuchFileException
        // if the file exists, append it
        // Files.write(path, content.getBytes(StandardCharsets.UTF_8),
				//	StandardOpenOption.APPEND);
    }
}

Выход

Запустите 1-й раз, и мы создали файл с именем aaa.txt .

Hello World 1

Запустите 2-й раз, мы переопределим содержимое файла.

Hello World 1

Для режима добавления мы можем определить оба параметра StandardOpenOption. СОЗДАТЬ и Стандартная опция. добавлять .

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

Запустите 3-й раз, на этот раз с включенным режимом добавления, мы добавим новое содержимое в конец файла.

Hello World 1
Hello World 1

1.3. Файлы.запись также поддерживает Итерируемый , это означает, что мы можем передать Список для записи нескольких строк в файл.

	List list = Arrays.asList("a", "b", "c");

	// Java 7
	Files.write(path, list, StandardCharsets.UTF_8);

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

2. Java 11 – Java 11 –

В Java 7 нам нужно преобразовать Строку в байт[] перед передачей в Files.write .

	String content = "...";
	Files.write(path, content.getBytes(StandardCharsets.UTF_8));

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

	// Java 11
  private static void writeFileJava11(Path path, String content)
			throws IOException {

      // default utf_8
      // file does not exists, create and write it
      // if the file exists, override the content
      Files.writeString(path, content);

      // Append mode
      // Files.writeString(path, content,
			//	StandardOpenOption.CREATE, StandardOpenOption.APPEND);
  }

3. Файловый редактор + буферизованный редактор

3.1 До Java 7 комбинация FileWriter + BufferedWriter была стандартным решением для создания и записи символов или текста в файл.

	try (FileWriter fw = new FileWriter(file);
       BufferedWriter bw = new BufferedWriter(fw)) {
      bw.write(content);
      bw.newLine(); // add new line, System.lineSeparator()
  }

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

3.2 В Java 8 мы можем использовать Files.newbufferedwriter для непосредственного создания объекта BufferedWriter .

	// default utf_8
  try (BufferedWriter bw = Files.newBufferedWriter(path)) {
      bw.write(content);
      bw.newLine();
  }

  // append mode
  try (BufferedWriter bw = Files.newBufferedWriter(path,
          StandardOpenOption.CREATE, StandardOpenOption.APPEND)) {
      bw.write(content);
      bw.newLine();
  }

P.S В вышесказанном нет ничего плохого Файловый редактор + буферизованный редактор способ записи файла, просто то то обеспечивает более чистый и простой в использовании API.

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

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

	private static void writeFile(File file, byte[] bytes) throws IOException {

      try (FileOutputStream fos = new FileOutputStream(file)) {
          fos.write(bytes);
      }

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

  }

Скачать Исходный Код

$клон git $клон git

$cd java-ввод-вывод

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

Оригинал: “https://mkyong.com/java/java-how-to-create-and-write-to-a-file/”