728x90
반응형
* 문자 스트림은 2바이트의 유니코드 문자를 단위로 입출력하는 스트림이다.
문자화되지 않는 바이너리 바이트 값들은 문자 스트림 클래스에서 처리할 수 없다.
따라서 이미지오 ㅏ같은 바이너리 정보는 처리할 수 없다.
문자 입력 스트림은 바이트들을 전달받고, 이 바이트들을 '로컬 문자 집합'에 있는 문자인지 비교하여 문자로 변환한다.
* FileReader를 이용한 텍스트 파일 읽기
* 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() | 입력 스트림을 닫고 관련도니 시스템 자원 해제 |
* 파일이 큰 경우 한 번에 한 문자씩 읽으면 읽는 속도가 너무 느리기 때문에, 한 번에 한 블록(버퍼 크기)만큼 읽는 read()를 이용한다.
char[] buf = new char[1024]; // 1024는 1KB이다.
int n = fin.read(buf); // 한 번에 1024개 문자를 읽어 buf[]에 저장하고 실제 읽은 문자수 리턴
* 파일 입출력 실행 중 예외가 발생할 수 있다.
1) 파일의 경로명이 틀린 경우, FileReader 생성자는 FilenotFoundException 예외를 발생 시킨다.
FileReader fin = new FileReader("C:\\test.txt"); // FileNotFoundException 발생가능
2) 파일 읽기, 쓰기, 닫기를 하는 동안 입출력 오류가 발생하면, read(), write(), close() 메소드는 IOException 예외를 발생시킨다.
int c = fin.read(); // IOException 발생 가능
파일 입출력 코드에 try-catch 블록이 필요하다.
try {
FileReader fin = new FileReader("c:\\test.txt");
...
int c = fin.read();
..
fin.close();
} catch(FileNotFoundException e){
System.out.println("파일을 열 수 없음");
// 생략 가능. FileNotFoundException은 IOexception을 상속 받기 때문에 생략 가능하다.
} catch(IOException e) {
System.out.println("입출력 오류");
}
* FileReader로 텍스트 파일 읽기
import java.io.*;
public class Ch0801Ex {
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("입출력 오류");
}
}
}
결과
반응형
'IT > 자바공부' 카테고리의 다른 글
바이트 스트림과 파일 입출력 (0) | 2022.06.14 |
---|---|
문자 집합과 InputStreamReader, 명품 자바 프로그래밍 8장 (0) | 2022.06.13 |
스트림 입출력 Stream, 명품 자바 프로그래밍 8장 (0) | 2022.06.13 |
제네릭 클래스 만들기, 명품 자바 프로그래밍 7장 (0) | 2022.06.11 |
LinkedList, Collections 클래스 활용, 자바 명품 프로그래밍 7장 (0) | 2022.06.11 |