본문 바로가기

자바공부

문자 집합과 InputStreamReader, 명품 자바 프로그래밍 8장

728x90
반응형

* InputStreamReader는 스트림에 입력되는 바이트 데이터를 문자 집합을 통해 문자로 변환한다.

이를 위해 InputStreamReader의 생성자에 문자 집합을 지정해야 한다.

만약 읽어 들인 바이트들이 문자 집합에 속하지 않는 경우 해독할 수 없는 글자가 된다.

 

* InputStreamReader 생성자

생성자 설명
InputStreamReader(InputStream in) in으로부터 읽는 기본 문자 집합의 InputStreamReader 생성
InputStreamReader(InputStream in, Charset cs) in으로부터 읽는 cs 문자 집합의 InputStreamReader 생성
InputStreamReader(InputStream in, String charsetName) in으로부터 읽는 charsetname 문자 집합의 InputStreamReader 생성

* InputStreamReader로 한글 텍스트 파일 읽기

 

package Ch0802Ex;
import java.io.*;
public class Ch0802Ex {
	public static void main(String[] args) {
		InputStreamReader in = null;
		FileInputStream fin = null;
		try {
			fin = new FileInputStream("c:\\Temp\\hangul.txt");
			in = new InputStreamReader(fin, "MS949"); // 올바른 문자 집합 지정
			int c;
			
			System.out.println("인코딩 문자 집합은 " + in.getEncoding());
			while((c=in.read()) != -1) {
				System.out.print((char)c);
			}
			in.close();
			fin.close();
		}catch(IOException e) {
			System.out.println("입출력 오류");
		}
	}
}

 

* FileWriter를 이용하여 텍스트 파일을 쓸 수 있다.

 

* FileWriter와 OutputStreamWriter의 생성자

생성자 설명
OutputStreamWriter(OutputStream out) out에 출력하는 기본 문자 집합의 OutputStreamWriter 생성
OutputStreamWriter
(OutputStream out, Charset cs)
out에 출력하는 cs 문자 집합의 OutputStreaMWrtier 생성
OutputStreamWriter
(OutputStream out, String charsetName)
charsetName 문자 집합의 OutputStreamWriter 생성
FileWriter(File file) file에 데이터를 저장할 FileWriter 생성
FileWriter(String name) name 파일에 데이터를 저장할 FileWriter 생성
FileWriter
(File file, boolean append)
FileWriter를 생성하며 append가 true이면 파일의 마지막부터 데이터를 저장
FileWriter
(String name, boolean append)
FileWriter를 생성하며 append가 true이면 파일의 마지막부터 데이터를 저장

 

* FileWriter와 OutputStreamWriter의 주요 메소드

메소드 설명
void write(int c) c를 char로 변환하여 한 개의 문자 출력
void write(String str) 문자열 str출력
viod wirte(String str, int off, int len) 인덱스 off부터 len개의 문자를 str 문자열에서 출력
void write(char[] cbuf, int off, int len) 인덱스 off부터 len개의 문자를 배열 cbuf에서 출력
void flush() 스트림에 남아있는 데이터 모두 출력
String getEncoding() 스트림이 사용하는 문자 집합의 이름 리턴
void close() 출력 스트림을 닫고 관련도니 시스템 자원 해제

 

* 키보드 입력을 파일로 저장하기

 

package Ch0804Ex;
import java.io.*;
import java.util.*;

public class Ch0804Ex {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		FileWriter fout = null;
		int c;
		try{
			fout = new FileWriter("c:\\Temp\\test.txt"); // 파일과 연결된 출력 문자 스트림 생성
			while(true) {
				String line = scanner.nextLine(); // 빈칸을 포함하여 한 줄 읽기, line에는 '\n'이 들어가지 않는다.
				if(line.length() == 0) // 한 줄에 <Enter>키만 입력한 경우
					break;
				fout.write(line, 0, line.length()); // 읽은 문자열을 파일에 저장
				fout.write("\r\n", 0, 2); // 한 줄 띄기 위해 \r\n을 파일에 저장
			}
			fout.close();
		}catch(IOException e) {
			System.out.println("입출력 오류");
		}
		scanner.close();
	}
}

 

반응형