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

}