1. FileReader 클래스
FileInputStream과 FileOutputStream은 byte 단위로 데이터를 전송한다. 그런데 한글같은 경우는 표현하기 위해 2byte를 사용해야 한다. "hello.txt"파일에 한글로 내용을 적고 읽어보면 다음과 같이 된다.
package stream;
import java.io.FileInputStream;
import java.io.IOException;
public class FileInputStreamTest {
public static void main(String[] args) {
try(FileInputStream fis = new FileInputStream("hello.txt")) {
int i;
while((i = fis.read())!=-1) {
System.out.print((char)i);
}
} catch (IOException e) {
System.out.println(e);
}
}
}
실행결과
"??¹?¸???¹?¶?"
문자가 깨진다.
이런경우에 사용하는 것이 문자 단위로 데이터를 읽는 스트림의 최사위 클래스인 Reader 클래스이다. 가장 대표적인 하위클래스인 FileReader를 통해 다시 파일 내용을 읽어보겠다.
package stream;
import java.io.FileReader;
import java.io.IOException;
public class FileInputStreamTest {
public static void main(String[] args) {
try(FileReader fr = new FileReader("hello.txt")) {
int i;
while((i = fr.read())!=-1) {
System.out.print((char)i);
}
} catch (IOException e) {
System.out.println(e);
}
}
}
실행결과
"자바를자바라"
한글이 깨지지않고 잘 출력되는 것을 볼 수 있다.
2. FileWriter 클래스
package stream;
import java.io.FileWriter;
import java.io.IOException;
public class FileOutputStreamTest {
public static void main(String[] args) {
try(FileWriter fw = new FileWriter("test.txt")) {
char[] buf = {'B', 'C', 'D'};
fw.write('A');
fw.write('가');
fw.write(buf, 1, 2);
fw.write("자바를자바라");
fw.write(65);
} catch (IOException e) {
System.out.println(e);
}
}
}
배열, 문자, 문자열은 물론 한글도 잘 써진다.
실행결과
A가CD자바를자바라A
'프로그래밍 언어 > Java' 카테고리의 다른 글
(Java) 57 - 객체 직렬화 (0) | 2020.05.18 |
---|---|
(Java) 56 - 보조 스트림 (0) | 2020.05.18 |
(Java) 54 - File 입출력 (0) | 2020.05.18 |
(Java) 53 - Scanner 클래스 (0) | 2020.05.18 |
(Java) 52 - Java 입출력 (0) | 2020.05.18 |