FileInputStream은 read()메서드에 의해 읽어들이는 데이터가 1byte이며, 2byte를 하나의 문자로 읽을 수 있는 능력이 없다. 따라서 영문의 한 철자는 경우엔 1byte 차지하므로, 읽어들인 데이터를 문자로 변경하는데 문제가 없지만, 한글의 경우엔 유니코드 기반이라 2byte로 하나의 문자를 표현하기 때문에 read() 메서드로 읽어들인 1byte는 한글을 표현할 수 없다.
-> 해결책? 읽어들인 데이터를 대상으로 2byte묶어, 문자로 이해하는 업그레이드 된 문자기반 스트림을이용해야 한다.
2byte -> char
참고) 여기서 중요한 부분은 FileInputStream 를 사용했으면 close() 메소드를 통해 닫아주는 게 중요하다.
throws의 의미: 개발자가 처리할 예외를, 현재의 메서드 호출부에게 전가시키는 방법
package com.koreait.project0830.stream3;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
class ReadCharacter{
FileReader reader; // 파일을 읽고, 그 읽은 데이터를 2byte씩 묶어 문자로 이해하는 스트림
FileWriter writer; // 문자를 출력할 수 있는 스트림
// WEB 개발 시 MVC패턴 -> 모듈 별로 분류가 됨..즉 역할별로 프로그램 분류
public ReadCharacter() throws FileNotFoundException, IOException{ // throws의 의미: 개발자가 처리할 예외를, 현재의 메서드 호출부에게 전가시키는 방법...
reader = new FileReader("C:/0810_bigData/Koreait2108_workspace/data/memo.txt");
writer = new FileWriter("C:/0810_bigData/Koreait2108_workspace/data/memo_copy.txt");
// 한문자 읽기!!
int data = -1;
while(true){
data = reader.read();
if(data==-1)break;
System.out.print((char)data);
writer.write(data);
}
if(reader!=null){reader.close();}
if(writer!=null){writer.close();}
}
public static void main(String[] args) throws FileNotFoundException, IOException{ // jvm 이 최종적으로 해결
new ReadCharacter();
}
}
2byte로 형변환하니까 한글이 안깨지고 보임!!
'빅데이터UI전문가 > JAVA' 카테고리의 다른 글
[따즈아 인강 1,2강] Java 왜 배울까, jdk 설치 (0) | 2021.09.23 |
---|---|
[JAVA] 빅데이터UI전문가 - day14 Stream (0) | 2021.08.31 |
[JAVA] 빅데이터UI전문가 - day14 웹상 이미지 다운로드해서 기존이미지 다운로드이미지로 바꾸기 (0) | 2021.08.30 |
[JAVA] 빅데이터UI전문가 - day10 String (0) | 2021.08.24 |
[JAVA] 빅데이터UI전문가 - day10 추상클래스 (0) | 2021.08.24 |