Освоение класса Reader в Java: подклассы, методы и практический пример
Класс Java Reader
Класс Reader в пакете java.io — абстрактный суперкласс, представляющий символьный входной поток. Нельзя инстанцировать его напрямую, но конкретные подклассы предоставляют функциональность для чтения текстовых данных из различных источников.
Распространённые подклассы Reader
- BufferedReader — добавляет буферизацию для эффективного чтения символов, массивов и строк.
- InputStreamReader — мостик от байтовых потоков к символьным с заданной кодировкой.
- FileReader — удобный класс для чтения файлов в кодировке платформы по умолчанию.
- StringReader — читает символы из строки как из потока.
Каждый подкласс будет рассмотрен в отдельных руководствах.
Инстанцирование Reader
Для создания конкретного ридера импортируйте java.io.Reader и один из подклассов. Например, с FileReader:
import java.io.Reader;
import java.io.FileReader;
Reader input = new FileReader("input.txt");
Так как Reader абстрактен, нужно использовать подкласс; иначе возникнет ошибка компиляции.
Совет: Другие подклассы инстанцируются аналогично.
Ключевые методы Reader
boolean ready()— возвращаетtrue, если поток готов к чтению без блокировки.int read(char[] cbuf)— читает символы в массив, возвращает количество прочитанных.int read(char[] cbuf, int off, int len)— читает доlenсимволов вcbufначиная сoff.void mark(int readAheadLimit)— помечает текущую позицию в потоке.void reset()— возвращает поток к последней отмеченной позиции.long skip(long n)— пропускает и отбрасываетnсимволов.
Пример: чтение файла с FileReader
Предположим, файл input.txt содержит:
This is a line of text inside the file.
Ниже полный, готовый к продакшену пример чтения файла и вывода содержимого:
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
public class Main {
public static void main(String[] args) {
// Буфер достаточного размера для ожидаемого содержимого
char[] buffer = new char[100];
// try-with-resources гарантирует автоматическое закрытие ридера
try (Reader reader = new FileReader("input.txt")) {
System.out.println("Есть ли данные в потоке? " + reader.ready());
int charsRead = reader.read(buffer);
System.out.println("Данные в потоке:\n" + new String(buffer, 0, charsRead));
} catch (IOException e) {
e.printStackTrace();
}
}
}
Вывод
Есть ли данные в потоке? true Данные в потоке: This is a line of text inside the file.
Ключевые моменты:
- Всегда закрывайте ридер —
try-with-resourcesделает это автоматически. - Используйте
ready()для проверки доступности данных перед чтением. - Обрабатывайте
IOExceptionдля покрытия сценариев файл не найден или ошибка чтения.
Для подробной документации посетите официальный Reader Javadoc.
Удачного кодинга!
java
- Ключевое слово final в Java: переменные, методы и классы
- Оператор instanceof в Java: полное руководство с примерами
- Наследование в Java: концепции, типы и практические примеры
- Статические вложенные классы в Java: использование, отличия и примеры
- Анонимные внутренние классы в Java: определение, синтаксис и практические примеры
- Паттерн Singleton в Java: как реализовать и безопасно использовать
- Рефлексия в Java: инспекция классов, методов и полей во время выполнения
- Освоение Java ObjectOutputStream: сериализация, методы и практические примеры
- Освоение Java Generics: создание переиспользуемого, типобезопасного кода
- Мастерство файловых операций в Java с java.io: создание, чтение, запись и удаление