SHUSTORY

15-4 문자 단위 스트림 본문

프로그래밍/JAVA

15-4 문자 단위 스트림

어서오시우 2023. 4. 4. 00:16
728x90

Reader

문자 단위로 읽는 스트림 중 최상위 스트림으로 다음 하위 클래스를 주로 사용한다.

스트림 클래스 설명
FileReader 파일에서 문자 단위로 읽는 스트림 클래스이다.
InputStreamReader 바이트 단위로 읽은 자료를 문자로 변환해 주는 보조 스트림 클래스이다.
BufferedReader 문자로 읽을 때 배열을 제공하여 한꺼번에 읽을 수 있는 기능을 제공해 주는 보조 스트림이다.

다음과 같이 자료를 읽는 메서드를 제공한다.

메서드 설명
int read( ) 파일로부터 한 문자를 읽는다.
읽은 값을 반환한다.
int read(char[ ] buf) 파일로부터 buf 배열에 문자를 읽는다.
int read(char[ ] buf, int off, int len) 파일로부터 buf 배열의 off 위치에서부터 len 개수만큼 문자를 읽는다.
void close( ) 스트림과 연결된 파일 리소스를 닫는다.

 

 

FileReader

FileReader를 생성하는 데 사용되는 생성자는 다음과 같다.

FileInputStream과 마찬가지로 읽으려는 파일이 없으면 FileNotFoundException이 발생한다.

생성자 설명
FileReader(String name) 파일 이름 name(경로 포함)을 매개변수로 받아 입력 스트림을 생성한다.
FileReader(File f) File 클래스 정보를 매개변수로 받아 입력 스트림을 생성한다.

Reader 스트림을 활용하지 않고 바이트 단위로 문자를 읽을 때 문자가 어떻게 되는지 알아보기 위해

먼저 앞에서 사용한 FileInputStream으로 자료를 읽어보자.

reader.txt 파일을 만들고 한글로 '안녕하세요'를 적은 후 바이트 단위로 읽었을 때 어떻게 되는지 확인해보자.

이전에 FileInputStreamTest2 예제에서 스트림을 생성할 때 한글을 적은 reader.txt 파일을 매개변수로 입력하여 생성한다.

예제01

예제를 실행하여 출력 결과를 보면 한글 문자가 모두 깨진 것을 알 수 있다.

한글을 바이트 단위로 읽어 오니 무슨 글자인지 알 수 없다.

따라서 문자를 입출력할 때는 문자 스트림을 사용해야 한다.

이제 FileReader로 reader.txt를 다시 읽어보자.

예제02_FileReader로 읽기

문자 스트림 FileReader로 읽으면 한글이 제대로 읽히는 것을 볼 수 있다.

이처럼 Reader 클래스는 문자를 처리할 때 사용하는 클래스이다.

나머지 read(char[ ] buf) 메서드와 read(char[ ]buf, int off, int len) 메서드의 내용은 FileInputStream과 유사하다.

 

 

Writer

문자 단위로 출력하는 스트림 중 최상위 스트림으로 다음 하위 클래스를 주로 사용한다.

스트림 클래스 설명
FileWriter 파일에 문자 단위로 출력하는 스트림 클래스이다.
OutputStreamWriter 파일에 바이트 단위로 출력한 자료를 문자로 변환해 주는 보조 스트림이다.
BufferedWriter 문자로 쓸 때 배열을 제공하여 한꺼번에 쓸 수 있는 기능을 제공해 주는 보조 스트림이다.

다음과 같이 자료를 읽는 메서드를 제공한다.

메서드 설명
void write(int c) 한 문자를 파일에 출력한다.
void write(char[ ] buf) 문자 배열 buf의 내용을 파일에 출력한다.
void write(char[ ] buf, int off, int len) 문자 배열 buf의 off 위치에서부터 len 개수의 문자를 파일에 출력한다.
void write(String str) 문자열 str를 파일에 출력한다.
void write(String str, int off, int len) 문자열 str의 off번째 문자부터 len 개수만큼 파일에 출력한다.
void flush( ) 파일에 출력하기 전에 자료가 있는 공간(출력 버퍼)을 비워 출력한다.
void close( ) 파일과 연결된 스트림을 닫는다. 출력 버퍼도 비워진다.

 

 

FileWriter

다른 스트림 클래스와 마찬가지로 생성자를 사용해서 스트림을 생성한다.

FileOutputStream과 마찬가지로 출력 파일이 존재하지 않으면 파일을 생성한다.

생성자는 다음과 같다.

생성자 설명
FileWriter(String name) 파일 이름 name(경로 포함)을 매개변수로 받아 출력 스트림을 생성한다.
FileWriter(String name, boolean append) 파일 이름 name(경로 포함)을 매개변수로 받아 출력 스트림을 생성한다.
append 값이 true이면 파일 스트림을 닫고 다시 생성할 때 파일 끝에 이어서 쓴다.
기본 값은 false이다.
FileWriter(File f, ) File 클래스 정보를 매개변수로 받아 출력 스트림을 생성한다.
FileWriter(File f, boolean append) File 클래스 정보를 매개변수로 받아 출력 스트림을 생성한다.
append 값이 true이면 파일 스트림을 닫고 다시 생성할 때 파일 끝에 이어서 쓴다.
기본 값은 false이다.

Writer에서 제공하는 여러 가지 메서드와 FileWriter를 사용하여 실습해 보자.

예제03_FileWriter로 쓰기

예제에서 write( ) 메서드를 사용해보았다.

9행은 문자 하나를 출력하였고, 13행은 문자열 전체를 출력하였다.

12행에서는 문자 배열 전체를, 14행에서는 배열 일부만 출력하는 메서드를 사용하였다.

 

앞에서 FileOutputStream을 사용했을 때 숫자 65를 출력하면 65의 아스키 코드 값에 해당하는 A가 보였다.

이는 한 바이트로 해석되어 출력되기 때문이다.

만약 그냥 숫자 65를 출력하고 싶다면 15행과 같이 FileWriter를 활용한다.

'프로그래밍 > JAVA' 카테고리의 다른 글

15-5 보조 스트림  (0) 2023.04.06
15-3 바이트 단위 스트림  (0) 2023.03.21
15-2 표준 입출력  (0) 2023.03.21
15-1 자바 입출력과 스트림  (0) 2023.03.21
14-4 사용자 정의 예외  (0) 2023.03.17