TIL 22 | [Java] 문자 스트림과 파일 입출력

Yoonsik·2022년 6월 4일
0

JAVA

목록 보기
3/11

💻 문자 스트림과 파일 입출력

문자 스트림 클래스

문자스트림은 2바이트의 유니코드 문자를 단위로 입출력하는 스트림이다. 문자화 되지 않는 바이너리 바이트 값들은 문자 스트림 클래스에서 처리할 수 없다.

문자 입력 스트림은 바이트들을 전달 받고, 이 바이트들을 '로컬 문자 집합'에 있는 문자인지 비교하여 문자로 변환한다.

FileReader 를 이용한 텍스트 파일 읽기

FileReader : 문자 스트림 클래스로, 텍스트 파일을 읽는데 사용할 수 있다.

1) 파일 입력 스트림 생성

먼저, 파일 입력 스트림을 생성하고, 스트림을 파일(텍스트 파일)과 연결한다.

FileReader fin = new FileReader("c;\\test.txt");

FileReader로 파일 입력 스트림 fin을 생성하고, c;\\test.txt 파일을 연결하는 코드.

2) 파일 입출력 스트림을 이용한 파일 읽기

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[]에 저장하고, 실제 읽은 문자 수 리턴

이때 버퍼란 읽고 쓸 데이터를 저장하는 배열을 부르는 용어이다.

3) 스트림 닫기

파일 읽기가 더이상 필요 없으면 다음과 같이 close() 메소드를 호출하여 파일 입력 스트림을 닫는다.

fin.close();

파일 입출력과 예외 처리

파일 입출력 실행 중, 예외가 발생할 수 있다.
1) 파일의 경로가 틀린경우 : FileReader 생성자는 FileNotFoundException 예외를 발생시킨다.

2) 파일 읽기, 쓰기, 닫기를 하는동안 입출력 오류가 발생하는 경우 : read(), write(), close() 메소드는 IOException예외를 발생시킨다.


FileWriter를 이용한 텍스트 파일 쓰기

FileWriter : 문자 스트림 클래스로, 텍스트 파일을 쓰는데 사용할 수 있다.

1) 파일 출력 스트림 생성

텍스트 파일인 c:\\Text.txt 파일에 텍스트를 쓰는 출력 스트림 fout를 생성한다.

FileWriter fout = new FileWriter("c:\\Text.txt");

FileWriter 의 생성자는 c:\\Text.txt 파일을 열어, 스트림과 연결한다.
이때 FileReader 의 생성자와는 달리, 해당 파일이 존재하지 않는(없는) 경우, 새로 빈 파일을 생성한다.
또 이미 파일이 있는 경우에는, 기존 파일 내용을 지우고, 파일의 처음부터 쓸 준비를 한다.

2) 파일 쓰기

  • fout 스트림의 write() 메소드를 사용하면 문자 단위로 파일에 저장 할 수 있다.
fout.write('A'); // 문자 'A'를 파일에 저장
  • write() 활용 - 한번에 한 블록씩 저장하기
    line2 - FileWriter와 OutPutStreamWriter의 메소드
    void write(char[] cbuf(배열 이름), int off(시작 인덱스), int len(배열 크기))
1. char [] buf = new char[1024];
2. fout.write(buf, 0, 2, buf.length);

3) 스트림 닫기

텍스트를 모두 파일에 저장 하였으면 다음과 같이 close() 메소드를 호출하여 스트림을 닫는다. 스트림을 닫으면 연결된 파일도 닫힌다.

fout.close();
profile
꾸준함의 힘

0개의 댓글