문자스트림은 2바이트의 유니코드 문자를 단위로 입출력하는 스트림이다. 문자화 되지 않는 바이너리 바이트 값들은 문자 스트림 클래스에서 처리할 수 없다.
문자 입력 스트림은 바이트들을 전달 받고, 이 바이트들을 '로컬 문자 집합'에 있는 문자인지 비교하여 문자로 변환한다.
FileReader : 문자 스트림 클래스로, 텍스트 파일을 읽는데 사용할 수 있다.
먼저, 파일 입력 스트림을 생성하고, 스트림을 파일(텍스트 파일)과 연결한다.
FileReader fin = new FileReader("c;\\test.txt");
FileReader로 파일 입력 스트림 fin을 생성하고, c;\\test.txt
파일을 연결하는 코드.
fin.read()는 연결된 파일로부터 문자 하나를 읽어 리턴하며, 파일의끝(EOF)을 만나면 -1을 리턴한다.
int c;
while((c = fin.read()) != -1) {
System.out.print((char)c);
}
fin.read()를 이용하여 파일 전체를 화면에 출력하는 코드.
파일이 큰 경우에는 한글자씩 읽어들이기엔 속도가 너무 느려지기 때문에 버퍼크기(한 블록) 만큼 읽는 read()를 이용한다.
char [] buf = new char [1024];
int n = fin.read(buf); // 한번에 1024개의 문자를 읽어 buf[]에 저장하고, 실제 읽은 문자 수 리턴
이때 버퍼란 읽고 쓸 데이터를 저장하는 배열을 부르는 용어이다.
파일 읽기가 더이상 필요 없으면 다음과 같이 close() 메소드를 호출하여 파일 입력 스트림을 닫는다.
fin.close();
파일 입출력 실행 중, 예외가 발생할 수 있다.
1) 파일의 경로가 틀린경우 : FileReader 생성자는 FileNotFoundException 예외를 발생시킨다.
2) 파일 읽기, 쓰기, 닫기를 하는동안 입출력 오류가 발생하는 경우 : read(), write(), close() 메소드는 IOException예외를 발생시킨다.
FileWriter : 문자 스트림 클래스로, 텍스트 파일을 쓰는데 사용할 수 있다.
텍스트 파일인 c:\\Text.txt
파일에 텍스트를 쓰는 출력 스트림 fout를 생성한다.
FileWriter fout = new FileWriter("c:\\Text.txt");
FileWriter 의 생성자는 c:\\Text.txt
파일을 열어, 스트림과 연결한다.
이때 FileReader 의 생성자와는 달리, 해당 파일이 존재하지 않는(없는) 경우, 새로 빈 파일을 생성한다.
또 이미 파일이 있는 경우에는, 기존 파일 내용을 지우고, 파일의 처음부터 쓸 준비를 한다.
fout.write('A'); // 문자 'A'를 파일에 저장
void write(char[] cbuf(배열 이름), int off(시작 인덱스), int len(배열 크기))
1. char [] buf = new char[1024];
2. fout.write(buf, 0, 2, buf.length);
텍스트를 모두 파일에 저장 하였으면 다음과 같이 close() 메소드를 호출하여 스트림을 닫는다. 스트림을 닫으면 연결된 파일도 닫힌다.
fout.close();