카테고리 없음

문자 단위 스트림

자바게 2020. 4. 8. 15:31

Reader

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

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

다음과 같이 자료를 읽는 메소드를 제공합니다.

 

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

그러면 Reader 중 가장 많이 사용하는 FileReader에 대해 살펴보겠습니다.

 

FileReader

FileReader를 생성하는 데 사용하는 생성자는 다음과 같습니다. FileInputStream과 마찬가지로 읽으려는 파일이 없으면 FileNotFoundException이 발생합니다.

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

 

문자스트림 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() 파일과 연결된 스트림을 닫습니다. 출력 버퍼도 비워집니다.

Writer 스트림 중 가장 많이 사용하는 FileWriter 스트림 클래스로 자료를 출력해 봅시다.

 

 

 

Filewriter

다른 스트림 클래스와 마찬가지로 생성자를 사용해서 스트림을 생성합니다. FileOutputStream과 마찬가지로 출력 파일이 존재하지 않으면 파일을 생성합니다. 생성자는 다음과 같습니다.

 

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

File 클래스 정보를 매개변수로 받아 출력 스트림을 생성합니다. append 값이 true이면 파일 스트림을 닫고 다시 생성할 때 파일 끝에 이어서 씁니다. 기본 값은 false입니다

 

예제에서 여러 write() 메소드를 사용해 보았습니다. 9행은 문자하나를 출력하는 경우이고, 13행에서는 문자열 전체를 출력하였습니다. 문자 배열도 12행에서는 전체를 출력하고, 14행에서는 배열 일부만 출력하는 메소드를 사용했습니다. 앞에서 FileOutputStream을 사용했을 때 숫자 65를 출력하면 65의 아스키 코드값에 해당하는 A가 보였습니다. 이는 한 바이트로 해석되어 출력되기 때문입니다. 만약 그냥 숫자 65를 출력하고 싶다면 15행과 같이 FileWriter를 활용합니다. writer.txt 파일을 확인해 보면 다음과 같습니다.