Notice
Recent Posts
Recent Comments
관리 메뉴

Developer Gonie

[5주차] 82. 문자스트림, 특정 파일을 읽기위한 , 특정파일에 쓰기위한 연결다리(FileReader / FileWriter) - 한 글자씩 처리, 한글을 읽어오고 저장시 유용 본문

K-DigitalTraining 강의/1. Java

[5주차] 82. 문자스트림, 특정 파일을 읽기위한 , 특정파일에 쓰기위한 연결다리(FileReader / FileWriter) - 한 글자씩 처리, 한글을 읽어오고 저장시 유용

이대곤 2022. 6. 7. 12:12

* 한글을 사용하려면 문자 스트림! FileReader / FileWriter

  스트림에는 '문자 스트림'과 '바이트 스트림'이 존재하는데 FileInputStream / FileOutputStream은 바이트 스트림으로

  영어나 특수문자 숫자는 잘 처리하나, 한글은 잘 처리를 못함. 깨짐.
  한글을 다루고 싶다면 문자 스트림의 FileReader/FileWriter를 사용해야 함.

 

* 스트림.close()의 숨겨진 기능

  close 해주면 버퍼에 있지만 아직 파일로 내보내지지 않은걸 내보내게 한다.
  이와 비슷한 효과를 갖는 것으로 스트림.flush() 메소드가 있다.

 

* 여기서도 2차 스트림을 사용하고 싶은 경우 BufferedRead/BufferedWriter 클래스를 사용하면 됨.

예시코드

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Ex11_05_ReaderWriter {
	public static void main(String[] args) {
		
		// 바이트스트림 : FileInputStream/FileOutputStream
		// 문자스트림   : FileWriter/FileReader
						
		FileWriter fw = null;
		FileReader fr = null;
		
		try {
			fw =new FileWriter("write.txt"); // 파일이 존재하지 않는 경우 new IOException()
			fw.write("즐거운 자바수업~");
			// 여기까진 파일에 쓰여진게 없이 버퍼에 문자열만 들어온 상태
           		// fw.close() 해주면 버퍼에 있던게 강제로 파일로 전달됨
            
			fr = new FileReader("write.txt"); // 경로가 존재하지 않는 경우 new FileNotFoundException()

			int i;
			
			while((i = fr.read()) != -1) {	// 아스키 코드로 한 글자씩 읽어옴
				System.out.println(i);
			}
			
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				fw.close(); // 스트림을 닫는 기능이지만, 이걸 해줘야 버퍼에 있는 문자열을 파일로 내보낼 수 있다.
				fr.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			
		}
	}
}
Comments