FileReader
문자 스트림 클래스
2바이트의 유니코드 문자를 단위로 출력하는 스트림입니다. 문자화되지 않은 바이너리 바이트 값들은 문자 스트림 클래스에서 처리할 수 없습니다. 따라서 이미지와 같은 바이너리 정보를 처리할 수 없습니다. 문자 입력 스트림은 바이트들을 전달받고, 이 바이트들은 '로컬 문자 집합'에 있는 문자인지 비교하여 문자로 변환합니다.
FileReader를 이용한 텍스트 파일 읽기
파일 입력 스트림 생성
먼저 파일 입력 스트림을 생성하고 스트림을 파일과 연결합니다.
FileReader fin = new FileReader("c:\\test.txt');
FileReader의 생성자는 c:\test.txt 파일을 찾아 열고, 파일과 스트림을 연결합니다. c:\test.txt 파일은 문자들로만 구성된 텍스트 파일입니다.
파일 읽기
fin.read()는 연결된 파일로부터 문자 하나를 읽어 리턴하며, 파일의 끝(EOF)를 만나면 -1을 리턴합니다. fin.read()를 이용하여 파일 전체를 읽어 화면에 출력하는 코드는 다음과 같습니다.
int c;
while ((c = fn.read()) != -1) { // 문자 하나를 c에 읽어 들인다. 파일 끝까지 반복한다.
System.out.print((char)c); // 문자 c를 화면에 출력한다.
}
파일이 큰 경우 한 번에 한 문자씩 읽으면 읽는 속도가 너무 느리기 때문에 다음과 같이 한 번에 한 블록(버퍼 크기)만큼 읽는 read()를 사용하면 됩니다.
char [] buf = new char[1024]; // 1024는 1KB이다.
int n = fin.read(buf); // 한 번에 1024개 문자를 읽어 buf[]에 저장하고 실제 읽은 문자수 변환
버퍼란 읽고 쓸 데이터를 저장하는 배열을 부르는 용어입니다.
스트림 닫기
파일 읽기가 더 이상 필요 없으면 다음과 같이 close() 메서드를 호출하여 파일 입력 스트림을 닫는다. 닫힌 스트림으로부터는 더 이상 읽을 수 없습니다.
fin.close();
FileReader의 생성자
| 생성자 | 설명 |
| FileReader(File file) | file로부터 읽는 FileReader 생성 |
| FileReader(String name) | name 이름의 파일로부터 읽는 FileReader 생성 |
FileReader, Reader, InputStreamReader의 공통 주요 메소드
| 메소드 | 설명 |
| int read() | 한 개의 문자를 읽어 정수형으로 리턴 |
| int read(char[] cbuf) | 문자들을 읽어 cbuf 배열에 저장하고 읽은 개수 리턴 |
| int read(char[] cbuf,int off, int len) | 최대 len 개수의 문자들을 읽어 cbuf 배열의 off 위치부터 저장하고 실제 읽은 개수 리턴 |
| String getEncoding() | 스트림이 사용하는 문자 집합의 이름 리턴 |
| void close() | 입력 스트림을 닫고 관련된 시스템 자원 해제 |
파일 입출력과 예외 처리
파일 입출력 실행 중 예외가 발생할 수 있습니다. 첫째, 파일의 경로명이 틀린 경우, FileReader 생성자는 FileNotFoundException 예외를 발생시킵니다.
FileReader fin = new FileReader("c:\\test.txt'); // fileNotFoundException 발생 가능
둘째, 파일 읽기, 쓰기, 닫기를 하는 동안 입출력 오류가 발생하면, read(), write(), close() 메소드는 IOException 예외를 발생시킵니다.
int c = fin.read(); // IOException 발생 가능
그러므로 파일 입출력 코드에 다음과 같은 try-catch 블록이 필요합니다.
try {
FileReader fin = new FileReader("c:\\text.txt");
...
int c = fin.read();
...
fin.close();
} catch (FileNotFoundException e) {
System.out.println("파일이 열 수 없음");
} catch (IOException e) {
System.out.println("입출력 오류");
}
FileReader로 텍스트 파일 읽기
import java.io.FileReader;
import java.io.IOException;
public class FileReaderEx {
public static void main(String[] args) {
FileReader fin = null;
try {
fin = new FileReader("c:\\windows\\system.ini"); // 문자 입력 스트림 생성
int c;
while ((c = fin.read()) != -1) {
System.out.print((char)c);
}
fin.close();
}
catch (IOException e) {
System.out.println("입출력 오류");
}
}
}
실행 결과
; for 16-bit app support
[386Enh]
woafont=dosapp.fon
EGA80WOA.FON=EGA80WOA.FON
EGA40WOA.FON=EGA40WOA.FON
CGA80WOA.FON=CGA80WOA.FON
CGA40WOA.FON=CGA40WOA.FON
[drivers]
wave=mmdrv.dll
timer=timer.drv
[mci]
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
| FileWriter를 이용한 텍스트 파일 쓰기 (0) | 2025.04.23 |
|---|---|
| 문자 집합과 InputStreamReader를 이용한 텍스트 파일 읽기 (1) | 2025.04.20 |
| 자바의 입출력 스트림 (1) | 2025.04.14 |
| 제네릭 만들기 (0) | 2025.04.11 |
| LinkedList<E> & Collections 클래스 활용 (0) | 2025.04.08 |