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();
}
}
}
}