«1. Обзор

В этом руководстве мы изучим и поймем класс FileWriter, присутствующий в пакете java.io.

2. FileWriter

FileWriter — это специализированный OutputStreamWriter для записи символьных файлов. Он не предоставляет никаких новых операций, но работает с операциями, унаследованными от классов OutputStreamWriter и Writer.

До Java 11 FileWriter работал с кодировкой символов по умолчанию и размером буфера байтов по умолчанию. Однако в Java 11 представлены четыре новых конструктора, которые принимают набор символов, что позволяет использовать указанный пользователем набор символов. К сожалению, мы все еще не можем изменить размер байтового буфера, и он установлен на 8192.

2.1. Создание экземпляра FileWriter

В классе FileWriter есть пять конструкторов, если мы используем версию Java до Java 11.

Давайте взглянем на различные конструкторы:

public FileWriter(String fileName) throws IOException {
    super(new FileOutputStream(fileName));
}

public FileWriter(String fileName, boolean append) throws IOException {
    super(new FileOutputStream(fileName, append));
}

public FileWriter(File file) throws IOException {
    super(new FileOutputStream(file));
}

public FileWriter(File file, boolean append) throws IOException {
    super(new FileOutputStream(file, append));
}

public FileWriter(FileDescriptor fd) {
    super(new FileOutputStream(fd));
}

В Java 11 появилось четыре дополнительные конструкторы:

public FileWriter(String fileName, Charset charset) throws IOException {
    super(new FileOutputStream(fileName), charset);
}

public FileWriter(String fileName, Charset charset, boolean append) throws IOException {
    super(new FileOutputStream(fileName, append), charset);
}

public FileWriter(File file, Charset charset) throws IOException {
    super(new FileOutputStream(file), charset);
}

public FileWriter(File file, Charset charset, boolean append) throws IOException {
    super(new FileOutputStream(file, append), charset);
}

2.2. Запись строки в файл

Теперь воспользуемся одним из конструкторов FileWriter для создания экземпляра FileWriter и последующей записи в файл:

try (FileWriter fileWriter = new FileWriter("src/test/resources/FileWriterTest.txt")) {
    fileWriter.write("Hello Folks!");
}

Мы использовали конструктор FileWriter с одним аргументом, который принимает имя файла. Затем мы используем операцию записи (String str), унаследованную от класса Writer. Поскольку FileWriter поддерживает автоматическое закрытие, мы использовали попытку с ресурсами, чтобы нам не приходилось явно закрывать FileWriter.

При выполнении приведенного выше кода строка будет записана в указанный файл:

Hello Folks!

FileWriter не гарантирует, будет ли файл FileWriterTest.txt доступен или будет создан. Это зависит от базовой платформы.

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

2.3. Добавление строки в файл

Нам часто нужно добавить данные к существующему содержимому файла. Давайте теперь посмотрим на пример FileWriter, который поддерживает добавление:

try (FileWriter fileWriter = new FileWriter("src/test/resources/FileWriterTest.txt", true)) {
    fileWriter.write("Hello Folks Again!");
}

Как мы видим, мы использовали конструктор с двумя аргументами, который принимает имя файла и логический флаг добавления. Передача флага append как true создает FileWriter, который позволяет нам добавлять текст к существующему содержимому файла.

При выполнении кода к существующему содержимому указанного файла будет добавлена ​​строка:

Hello Folks!Hello Folks Again!

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

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

Как всегда, полный исходный код руководства доступен на GitHub.