고급 JAVA
JAVA -입출력 -파일 인코딩
햄찌개
2020. 9. 28. 09:31
* InputStreamReader 객체는 파일의 인코딩 방식을 지정할 수 있다.
* 형식) new InputStreamReader(바이트기반 스트림객체, 인코딩방식)
*
* - 인코딩 방식
* 한글인코딩 방식은 크게 UTF-8과 EUC-KR 방식 두가지로 나뉜다.
* 원래 한글윈도우는 CP949방식을 사용했는데, 윈도우를 개발한 마이크로소프트에서 EUC-KR 방식에서 확장하였기 때문에 MS949라고도 부른다.
* CP949는 EUC-KR의 확장이며, 하위호환성이 있다.
*
* - MS949 => 원도우의 기본한글 인코딩 방식(ANSI개열)
* - UTF-8 => 유니코드 UTF-8인코딩 방식(영문자 및 숫자 : 1byte, 한글 3byte) =>가번적
* - US-ASCII => 영어전용 인코딩방식
*
* ANSI는 영어를 표기하기 위해 만든 코드 규격으로 자체에 한글이 없었다가 나중에 여기에 EUC-KR(유닉스 개열), CP949(원도우)이라는 식으로 한글이 포함됨.
public static void main(String[] args) {
//파일 인코딩을 이용하여 읽어오기
FileInputStream fis =null;
InputStreamReader isr = null;
try {
/**
* FileInputStream객체를 생성한 후 이객체를 매개변수로 받는 InputStreamReader객체를 생성한다.
* (바이트 입력 스트림에 연결되어 문자 입력 스트림인 Reader로 변환시킨다.)
*/
fis = new FileInputStream("d://D_Other/test_utf8.txt");
//fis = new FileInputStream("d://D_Other/test_ansi.txt");
isr = new InputStreamReader(fis,"CP949");
int c ;
while ((c=isr.read())!=-1) {
System.out.print((char)c);
}
System.out.println();
System.out.println("출력끝...");
isr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
* OutputStreamWriter => OutputStream(바이트 기반 출력객체)를 Writer(문자기반의 출력용 객체)로 변환 해주는 객체
* => 이 객체도 출력할 때 '인코딩방식'을 지정해서 출력할 수 있다.
*/
//키보드로 입력한 내용을 파일로 저장하는데
// out_utf8.txt 파일은 'utf-8'인코딩 방식으로,
// out_ansi8.txt 파일은 'ms949'인코딩 방식으로 저장한다.
public class T10_FileEncodingTest {
public static void main(String[] args) throws IOException {
InputStreamReader isr = new InputStreamReader(System.in);
//파일 출력용
FileOutputStream fos1 = new FileOutputStream("d://D_Other/out_utf8.txt");
FileOutputStream fos2 = new FileOutputStream("d://D_Other/out_ansi.txt");
OutputStreamWriter osw1 = new OutputStreamWriter(fos1,"utf-8");
OutputStreamWriter osw2 = new OutputStreamWriter(fos2,"ms949");
int c;
System.out.println("아무거나 입력하세요.");
while ((c=isr.read())!=-1) {
osw1.write(c);
osw2.write(c);
}
System.out.println("작업완료...");
isr.close();
osw1.close();
osw2.close();
}
}