Java Reader 클래스 마스터하기: 서브클래스, 메서드, FileReader 실전 예제
Java Reader 클래스
이 가이드는 Java의 Reader 클래스, 주요 서브클래스, 필수 메서드, FileReader를 활용한 단계별 예제를 안내합니다.
Reader 클래스란?
java.io 패키지의 Reader 클래스는 문자 입력 스트림을 나타내는 추상 슈퍼클래스입니다. 직접 인스턴스화할 수 없지만, 구체적인 서브클래스들이 다양한 소스에서 텍스트 데이터를 읽는 데 필요한 기능을 제공합니다.
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) - off부터 cbuf에 최대 len 문자를 읽습니다.
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("Is there data in the stream? " + reader.ready());
int charsRead = reader.read(buffer);
System.out.println("Data in the stream:\n" + new String(buffer, 0, charsRead));
} catch (IOException e) {
e.printStackTrace();
}
}
}
실행 결과
Is there data in the stream? true
Data in the stream:
This is a line of text inside the file.
핵심 포인트:
- 항상 리더를 닫으세요.
try-with-resources가 자동으로 처리합니다.
- 읽기 시도 전
ready()로 데이터 가용성 확인.
- 파일 미발견이나 읽기 오류 시나리오를 위해
IOException 처리.
더 자세한 문서는 공식 Java Reader Javadoc을 참조하세요.
즐거운 코딩!