import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;

public class Ex008_Encoding {

	public static void main(String[] args) {
		// MS949(euc-kr 유사) 데이터를 UTF-8 형식의 파일로 저장하기
		int data;
		String pathname = "test.txt";
		
		// 파일에 내용을 문자 출력 스트림. 인코딩은 UTF-8
		try (Writer wt = new OutputStreamWriter(new FileOutputStream(pathname), "UTF-8") ){
			// 바이트 스트림을 문자 스트림으로 바꿈
			// byte 스트림을 문자 스트림으로. 인코딩은 MS949
			Reader rd = new InputStreamReader(System.in, "MS949");
			
			// Reader rd = new InputStreamReader(System.in); // 시스템에 설정된 기본 인코딩

			System.out.println("입력[종료:ctrl+z]...");
			while( (data = rd.read()) != -1) {
				wt.write(data);
			}
			wt.flush();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

}

문자 스트림을 다루기 때문에 내용을 보낼 때 Writer, 내용을 받을 때 Reader 를 사용한다.

여기서는 키보드를 통해 입력받은 것을 test.txt로 저장한다.

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;

public class Ex009_Encoding {

	public static void main(String[] args) {
		// UTF-8 파일을 MS949 파일로 복사하기
		String source = "test.txt";
		String dest = "ex.txt";
		
		int data;
		try(Reader rd = new InputStreamReader(new FileInputStream(source), "UTF-8");
			Writer wt = new OutputStreamWriter(new FileOutputStream(dest), "MS949")	
			) {
			
			while( (data = rd.read()) != -1) {
				wt.write(data);
			}
			wt.flush();
			
			System.out.println("변환 저장 완료...");
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}

위에서 test.txt 저장한 것을 MS949로 변환시켜준다.

+ Recent posts