문자 단위 스트림
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로 읽으면 한글이 제대로 읽히는 것을 알 수 있습니다. 이처럼 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 파일을 확인해 보면 다음과 같습니다.