일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 다형성
- 바이트 단위 스트림
- 문자 단위 스트림
- 인스턴스
- 새벽공부
- 배열
- 메서드
- 초보개발자
- 상속
- 코린이
- 졸리다
- MPA
- ArrayList
- try-catch
- 자료형
- throws
- 변수
- 파이팅
- Java
- exception
- 예외 처리
- 백엔드
- 개발자
- SSR
- 코딩
- 보조 스트림
- node.js
- 인터페이스
- FileInputStream
- 자바
- Today
- Total
SHUSTORY
15-4 문자 단위 스트림 본문
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 파일을 매개변수로 입력하여 생성한다.
예제를 실행하여 출력 결과를 보면 한글 문자가 모두 깨진 것을 알 수 있다.
한글을 바이트 단위로 읽어 오니 무슨 글자인지 알 수 없다.
따라서 문자를 입출력할 때는 문자 스트림을 사용해야 한다.
이제 FileReader로 reader.txt를 다시 읽어보자.
문자 스트림 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를 사용하여 실습해 보자.
예제에서 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 |