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();
}
}
반응형
'자바공부' 카테고리의 다른 글
버퍼 입출력과 파일 입출력, 명품 자바 프로그래밍 8장 (0) | 2022.06.14 |
---|---|
바이트 스트림과 파일 입출력 (0) | 2022.06.14 |
문자 스트림과 파일 입출력 (0) | 2022.06.13 |
스트림 입출력 Stream, 명품 자바 프로그래밍 8장 (0) | 2022.06.13 |
제네릭 클래스 만들기, 명품 자바 프로그래밍 7장 (0) | 2022.06.11 |