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 .