Reader
- 문자 단위 입력 스트림의 최상위 추상 클래스
- 많은 추상 메서드가 선언되어 있고, 이를 하위 스트림에서 상속받아 구현
- 주요 하위 클래스
| 스트림 클래스 |
설명 |
| FileReader |
파일에서 문자 단위로 자료를 읽음 |
| InputStreamReader |
바이트 단위로 읽은 자료를 문자로 변환해주는 보조 스트림 |
| BufferedReader |
문자로 읽을 때 배열을 제공하여 한꺼번에 읽을 수 있는 기능을 제공하는 보조 스트림 |
| 메서드 |
설명 |
| int read() |
파일로부터 한 문자를 읽음. 읽은 문자 반환 |
| int read(char[] buf) |
파일로부터 buf 배열에 문자를 읽음 |
| int read(byte b[], int off, int len) |
파일로부터 buf 배열의 off 위치로부터 len 개수만큼의 문자를 읽음 |
| void close() |
입력 스트림과 연결된 대상 리소스를 닫음 |
예제 코드
FileReaderTest.java
- "안녕하세요" 라는 한글 문자열을 읽어들임
- FileInputStream을 생성해서 파일을 읽을 경우 바이트 단위로 읽기 때문에 2바이트로 저장되는 한글은 깨짐
package ch15;
import java.io.FileReader;
import java.io.IOException;
public class FileReaderTest {
public static void main(String[] args) {
// try (FileInputStream fis = new FileInputStream("reader.txt")){ // 한글일 경우 깨짐
try (FileReader fr = new FileReader("reader.txt")) {
int i;
while((i = fr.read()) != -1) {
System.out.print((char)i);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Writer
- 문자 단위 출력 스트림의 최상위 추상 클래스
- 많은 추상 메서드가 선언되어 있고, 이를 하위 스트림에서 상속받아 구현
- 주요 하위 클래스
| 스트림 클래스 |
설명 |
| FileWriter |
파일에서 문자 단위로 자료를 씀 |
| OutputStreamWriter |
바이트 단위의 자료를 문자로 변환해 출력해주는 보조 스트림 |
| BufferedWriter |
문자로 쓸 때 배열을 제공하여 한꺼번에 쓸 수 있는 기능을 제공하는 보조 스트림 |
| 메서드 |
설명 |
| int write(int c) |
한 문자를 파일에 씀 |
| int write(char[] buff) |
문자 배열 buf의 내용을 출력 |
| int write(char[] buf, int off, int len) |
문자 배열 buf의 off 위치부터 len 개수만큼 문자 출력 |
| int write(String str) |
문자열 str 출력 |
| int write(String str, int off, int len) |
문자열 str의 off번째 문자로부터 len 개수만큼 출력 |
| void flush() |
출력을 위해 자료가 머무르는 출력 버퍼를 강제로 비워 자료를 출력. 소켓 혹은 네트워크에서 가끔 사용 |
| void close() |
출력 스트림과 연결된 대상 리소스를 닫음. 출력 버퍼 비워짐 (flush() 호출됨) |
예제 코드
FileWriterTest.java
package ch15;
import java.io.FileWriter;
import java.io.IOException;
public class FileWriterTest {
public static void main(String[] args) {
try(FileWriter fw = new FileWriter("writer.txt")) {
fw.write('A'); // A 출력
char buf[] = {'B','C','D','E','F','G'};
fw.write(buf); // B~G 출력
fw.write("안녕하세요"); // 문자열 출력
fw.write(buf, 1, 2); // C,D 출력
fw.write("65"); // 숫자 출력
} catch (IOException e) {
}
}
}