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

Java FileWriter

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

1. Обзор

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

2. FileWriter

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

До Java 11 FileWriter работал с кодировкой символов по умолчанию и размером буфера байтов по умолчанию. Однако в Java 11 представлены четыре новых конструктора, которые принимают Charset , что позволяет использовать указанный пользователем Charset . К сожалению, мы все еще не можем изменить размер байтового буфера, и он установлен на 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 является AutoCloseable , мы использовали try-with-resources , чтобы нам не приходилось явно закрывать 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 . Передача флага append как true создает FileWriter , который позволяет нам добавлять текст к существующему содержимому файла .

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

Hello Folks!Hello Folks Again!

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

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

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