Класс Java FileReader может использоваться для чтения данных(потока символов) из файлов. В этом уроке мы изучим класс FileReader, его конструкторы, методы и использование с помощью примеров.
1. Введение
Класс FileReader:
- предназначен для чтения потоков символов.
- часть пакета java.io.
- расширяет класс InputStreamReader.
- реализует интерфейсы Closeable, AutoCloseable и Readable.
- если не указано иное, используется кодировка платформы по умолчанию.
- использует размер буфера по умолчанию для чтения файлов.
2. Создание FileReader
Чтобы использовать FileReader в приложении, мы должны сначала импортировать его из пакета java.io с помощью оператора import. Для создания экземпляра FileReader используйте один из его конструкторов.
2.1 Использование имени файла
String fileName = "c:\temp\test.txt";FileReader input = new FileReader(fileName);
2.2 Использование файла
File file = new File("c:\temp\test.txt");FileReader input = new FileReader(file);
2.3 Кодировка символов
Оба примера выше создают экземпляр чтения файлов с кодировкой символов по умолчанию. Чтобы указать другую кодировку символов, мы можем передать информацию о кодировке как Charset во втором аргументе обоим конструкторам.
FileReader input = new FileReader(fileName, Charset.forName("UTF8"));//orFileReader input = new FileReader(file, Charset.forName("UTF8"));
3. Примеры FileReader
Давайте рассмотрим несколько примеров чтения файла с помощью FileReader в Java.
3.1 Чтение небольшого текстового файла в char[]
В данном примере мы читаем текстовый файл. Файл содержит 3 небольших сообщения hello world. Здесь мы пытаемся прочитать файл одной операцией read(), поэтому убедитесь, что вы создали достаточно большой char[] для хранения всего содержимого файла.
Этот метод следует использовать только для небольших текстовых файлов.
String fileName = "demo.txt";try(FileReader fileReader = new FileReader(fileName)) {char[] a = new char[2048];fileReader.read(a);//verify content//System.out.println(new String(a));}
3.2 Чтение файла по одному символу за раз
В данном примере мы используем метод read(), который считывает один символ из файла и возвращает его. Когда все содержимое файла прочитано, он возвращает -1, что указывает на конец файла.
String fileName = "demo.txt";FileReader fileReader = new FileReader(fileName);try {int i;while((i = fileReader.read()) != -1) {System.out.print((char)i);}} finally {fileReader.close();}
3.3 Чтение файла построчно
FileReader напрямую не поддерживает чтение файла построчно. Для этого нам нужно обернуть FileReader внутрь экземпляра BufferedReader, который предоставляет метод readLine().
import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;public class FileReaderExample{public static void main(String[] args) throws IOException{String fileName = "demo.txt";BufferedReader br = new BufferedReader(new FileReader(fileName));try {String line;while((line = br.readLine()) != null) {System.out.println(line);}} finally {br.close();}}}