Java FileWriter
- Класс FileWriter в Java является частью пакета
java.io
. - FileWriter является подклассом класса
java.io.OutputStreamWriter
. - FileWriter предназначен для записи потоков символов.
- FileWriter используется для записи в символьные файлы. Его методы
write()
позволяют записывать символ(ы) или строки в файл. - Обычно объекты FileWriter оборачиваются более высокоуровневыми объектами Writer, такими как BufferedWriter или
PrintWriter
, которые обеспечивают лучшую производительность и более гибкие методы записи данных.
Конструкторы FileWriter
FileWriter(File file)
: Создает объектFileWriter
, используя указанный объект File. ВыбрасываетIOException
, если файл существует, но является каталогом, а не обычным файлом, или не существует, но не может быть создан, или не может быть открыт по какой-либо другой причине.FileWriter(File file, boolean append)
: Создает объект FileWriter, используя указанный объект File. Если второй аргумент установлен в true, то байты будут записаны в конец файла, а не в начало. Возбуждает исключение IOException, если файл существует, но является каталогом, а не обычным файлом, или не существует, но не может быть создан, или не может быть открыт по какой-либо другой причине.FileWriter(FileDescriptor fd)
: Создает объект FileWriter, связанный с указанным файловым дескриптором.FileWriter(String fileName)
: Создает объект FileWriter с использованием указанного имени файла. Возбуждает исключениеIOException
, если именованный файл существует, но является каталогом, а не обычным файлом, или не существует, но не может быть создан, или не может быть открыт по какой-либо другой причине.FileWriter(String fileName, boolean append)
: Создает объект FileWriter с использованием указанного имени файла и логического значения, указывающего, следует ли добавлять данные. Если второй аргумент установлен в true, то данные будут записаны в конец файла, а не в начало. Возбуждает исключение IOException, если именованный файл существует, но является каталогом, а не обычным файлом, или не существует, но не может быть создан, или не может быть открыт по какой-либо другой причине.
Пример Java FileWriter
FileWriter наследует методы классов java.io.OutputStreamWriter
и java.io.Writer
. Давайте рассмотрим нижеуказанные методы с примерами.
write(int c)
Этот метод записывает один символ, указанный параметром int c.
package com.journaldev.io.filewriter;
import java.io.FileWriter;
import java.io.IOException;
/**
* Java write file using FileWriter write method
*
* @author pankaj
*
*/
public class FileWriterWriteIntExample {
public static void main(String[] args) {
FileWriter fileWriter = null;
try {
fileWriter = new FileWriter("D:/data/file.txt");
// унаследованный метод из java.io.OutputStreamWriter
fileWriter.write(65);
fileWriter.write(66);
fileWriter.write(67);
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if (fileWriter != null) {
fileWriter.flush();
fileWriter.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
FileWriter реализует интерфейс
AutoCloseable
, поэтому мы можем использовать try с ресурсами при использовании класса FileWriter.
package com.journaldev.io.filewriter;
import java.io.FileWriter;
/**
* Java write file using FileWriter write method using try with resource
*
* @author pankaj
*
*/
public class FileWriterWriteIntTryWithResource {
public static void main(String[] args) {
try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
// унаследованный метод из java.io.OutputStreamWriter
fileWriter.write(65);
fileWriter.write(66);
fileWriter.write(67);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Примечание: В приведенной выше программе fileWriter.write(65)
запишет A в файл, потому что 65 – это десятичное значение символа A, следовательно, целое число 65 будет преобразовано в символ A, и то же самое с другими.
write(String str, int off, int len)
Этот метод записывает часть строки str
с позиции int off
по позицию int len
.
- str: Строка, которую нужно записать
- off: Смещение, с которого начать чтение символов
- len: Количество символов, которые будут записаны
Если значение параметра len отрицательно, то символы не записываются.
package com.journaldev.io.filewriter;
import java.io.FileWriter;
/**
* Java write file using FileWriter write(String s, int off, int len) method
*
* @author pankaj
*
*/
public class FileWriterWriteStringExample {
public static void main(String[] args) {
String data = "This is FileWriter Example.";
try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
// унаследованный метод от java.io.OutputStreamWriter
fileWriter.write(data, 8, 10);
} catch (Exception e) {
e.printStackTrace();
}
}
}
write(char[] cbuf, int off, int len)
Этот метод записывает часть массива символов, указанную char[] cbuf
с int off
по int len
.
- cbuf: Массив символов
- off: Смещение, с которого начинается чтение символов
- len : Количество символов для записи
package com.journaldev.io.filewriter;
import java.io.FileWriter;
/**
* Java write file using FileWriter write(char[] cbuf, int off, int len) method
*
* @author pankaj
*
*/
public class FileWriterWriteCharArray {
public static void main(String[] args) {
char[] data = "This is FileWriter Example.".toCharArray();
try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
// унаследованный метод от java.io.OutputStreamWriter
fileWriter.write(data, 8, 10);
} catch (Exception e) {
e.printStackTrace();
}
}
}
write(char[] cbuf)
Этот метод записывает массив символов, указанный cbuf.
package com.journaldev.io.filewriter;
import java.io.FileWriter;
/**
* Java write file using FileWriter write(char[] cbuf) method
*
* @author pankaj
*
*/
public class FileWriterWriteCharArrayExample {
public static void main(String[] args) {
char[] data = "This is FileWriter Example.".toCharArray();
try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
// унаследованный метод от java.io.Writer
fileWriter.write(data);
} catch (Exception e) {
e.printStackTrace();
}
}
}
write(String str)
Этот метод записывает строковое значение в файл, указанный str
.
package com.journaldev.io.filewriter;
import java.io.FileWriter;
/**
* Java write file using FileWriter write(String str) method
*
* @author pankaj
*
*/
public class FileWriterWriteString {
public static void main(String[] args) {
try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
// унаследованный метод от java.io.Writer
fileWriter.write("JournalDev");
} catch (Exception e) {
e.printStackTrace();
}
}
}
append(char c)
Этот метод добавляет указанный символ к этому writer, где c
– это 16-битный символ для добавления.
package com.journaldev.io.filewriter;
import java.io.FileWriter;
/**
* Java write file using FileWriter append(char c) method
*
* @author pankaj
*
*/
public class FileWriterAppendCharacter {
public static void main(String[] args) {
try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
// унаследованный метод от java.io.Writer
fileWriter.write("JournalDev");
fileWriter.append('C');
} catch (Exception e) {
e.printStackTrace();
}
}
}
flush()
Этот метод сбрасывает поток. Когда вызывается метод flush()
, данные немедленно записываются в выходной файл.
package com.journaldev.io.filewriter;
import java.io.FileWriter;
/**
* Java write file with FileWriter flush() method
*
* @author pankaj
*
*/
public class FileWriterFlushExample {
public static void main(String[] args) {
try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
// унаследованный метод от java.io.Writer
fileWriter.write("JournalDev");
// унаследованный метод от java.io.OutputStreamWriter
fileWriter.flush();
fileWriter.write(" Tutorials");
fileWriter.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
}
close()
Этот метод сбрасывает поток перед его закрытием. После закрытия потока вызов методов write()
или flush()
вызовет исключение IOException
. Закрытие ранее закрытого потока не оказывает никакого воздействия.
package com.journaldev.io.filewriter;
import java.io.FileWriter;
/**
* Java write file with FileWriter close() method
*
* @author pankaj
*
*/
public class FileWriterCloseExample {
public static void main(String[] args) {
try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
// унаследованный метод от java.io.Writer
fileWriter.write("JournalDev");
// унаследованный метод от java.io.OutputStreamWriter
fileWriter.close();;
fileWriter.write(" Tutorials");
} catch (Exception e) {
e.printStackTrace();
}
}
}
Вывод:
java.io.IOException: Stream closed
at sun.nio.cs.StreamEncoder.ensureOpen(Unknown Source)
at sun.nio.cs.StreamEncoder.write(Unknown Source)
at sun.nio.cs.StreamEncoder.write(Unknown Source)
at java.io.OutputStreamWriter.write(Unknown Source)
at java.io.Writer.write(Unknown Source)
at com.journaldev.examples.FileWriterCloseExample.main(FileWriterCloseExample.java:20)
FileWriter vs FileOutputStream
- FileWriter предназначен для записи потоков символов, в то время как FileOutputStream используется для записи потоков сырых байтов.
- FileWriter работает с 16-битными символами, в то время как FileOutputStream работает с 8-битными байтами.
- FileWriter может обрабатывать строки Unicode, в то время как FileOutputStream записывает байты в файл и не принимает символы или строки, поэтому для этого требуется обертка
OutputStreamWriter
для принятия строк.
Также смотрите java write file для получения дополнительной информации о том, как записать файл в Java. Это все, что касается Java FileWriter, я надеюсь, что здесь ничего важного не упущено.
Вы можете загрузить все примеры кода из нашего GitHub Repository.
Ссылка: API Doc
Source:
https://www.digitalocean.com/community/tutorials/java-filewriter-example