Класс Reader
Класс Reader - это абстрактный класс из пакета java.io, который служит основой для всех классов, читающих символьные данные. В отличие от байтовых потоков (InputStream), Reader работает с символами Unicode, что делает его удобным для чтения текстовых файлов. Основные методы класса позволяют читать один символ, массив символов или заполнять буфер. Поскольку класс абстрактный, напрямую создать его экземпляр нельзя - используются его наследники, например, FileReader или BufferedReader. В первом параметре методов чтения обычно передается буфер (массив символов), во втором - смещение в буфере, в третьем - количество символов для чтения.
Синтаксис
public abstract class Reader implements Readable, Closeable
Основные методы:
int read()
int read(char[] cbuf)
int read(char[] cbuf, int off, int len)
long skip(long n)
boolean ready()
void close()
Пример
Рассмотрим использование класса Reader через его наследника FileReader. Создадим файл, запишем в него строку, а затем прочитаем её посимвольно:
import java.io.FileReader;
import java.io.FileWriter;
import java.io.Reader;
import java.io.IOException;
public class Main
{
public static void main(String[] args)
{
try
{
FileWriter writer = new FileWriter("test.txt");
writer.write("abcde");
writer.close();
Reader reader = new FileReader("test.txt");
int ch;
String res = "";
while ((ch = reader.read()) != -1)
{
res += (char) ch;
}
reader.close();
System.out.println(res);
}
catch (IOException e)
{
System.out.println("Error: " + e.getMessage());
}
}
}
Результат выполнения кода:
"abcde"
Пример
Теперь прочитаем данные в массив символов с помощью метода read с тремя параметрами - буфером, смещением и длиной:
import java.io.FileReader;
import java.io.FileWriter;
import java.io.Reader;
import java.io.IOException;
public class Main
{
public static void main(String[] args)
{
try
{
FileWriter writer = new FileWriter("test.txt");
writer.write("12345");
writer.close();
Reader reader = new FileReader("test.txt");
char[] buffer = new char[5];
int count = reader.read(buffer, 0, 5);
reader.close();
String res = new String(buffer, 0, count);
System.out.println(res);
}
catch (IOException e)
{
System.out.println("Error: " + e.getMessage());
}
}
}
Результат выполнения кода:
"12345"
Смотрите также
-
метод
read,
который читает символы из потока -
метод
close,
который закрывает поток и освобождает ресурсы -
класс
BufferedReader,
который буферизует чтение символов -
класс
InputStreamReader,
который преобразует байтовый поток в символьный