JAVA/JAVA
Java | I/O 문자 단위 스트림
pathas
2020. 2. 6. 22:41
문자 단위 스트림
문자 단위로 데이터를 읽거나 쓰는 스트림
Reader
데이터를 문자 단위로 읽는 스트림 중 최상위 스트림
Reader 하위 클래스
스트림 클래스 | 설명 |
---|---|
FileReader | 파일에서 문자 단위로 자료를 읽는 스트림 클래스 |
InputStreamReader | 바이트 단위로 읽은 자료를 문자로 변환해 주는 보조 스트림 클래스 |
BufferedReader | 문자로 데이터를 읽을 때 배열을 제공하여 한꺼번에 많은 양의 데이터를 읽을 수 있도록(버퍼링) 도와주는 보조 스트림 |
Reader Method
메소드 | 설명 |
---|---|
int read() | 파일로부터 한 문자를 읽음, 읽은 값 반환 |
int read(char[] buf) | 파일로부터 buf 배열의 문자를 읽음 |
int read(char buf[], int off, int len) | buf 배열의 off 인덱스부터 len 개수만큼 문자를 읽음 |
void close() | 스트림과 연결된 대상 리소소를 닫음 |
FileReader
파일에서 문자 단위로 자료를 읽는 스트림 클래스
읽으려는 파일이 없으면 FileNotFoundException 예외 발생
FileReader 생성자
생성자 | 설명 |
---|---|
FileReader(String name) | 파일 이름(경로 포함)을 매개변수로 받아 입력 스트림 생성 |
FileReader(File f) | File 클래스 객체를 매개변수로 받아 입력 스트림 생성 |
Writer
데이터를 문자 단위로 출력하는 스트림 중 최상위 스트림
Writer 하위 클래스
스트림 클래스 | 설명 |
---|---|
FileWriter | 파일에 데이터를 문자 단위로 출력하는 스트림 클래스 |
OutputStreamWriter | 파일에 바이트 단위로 출력한 자료를 문자로 변환해 주는 보조 스트림 |
BufferedWriter | 데이터를 문자로 쓸 때 배열을 제공하여 한꺼번에 많은 양의 문자를 쓸 수 있도록 도와주는 보조 스트림 |
Writer Method
메소드 | 설명 |
---|---|
void write(int c) | 한 문자를 파일에 출력 |
void write(char[] buf) | 문자 배열 buf의 내용을 파일에 출력 |
void write(char[] buf, int off, int len) | b[] 배열에 있는 자료의 off 인덱스부터 len 개수만큼 자료를 출력 |
void write(String str) | str 문자열을 파일에 출력 |
void flush() | 파일을 출력하기 전에 출력 버퍼를 비워서 출력 |
void close() | 파일과 연결된 스트림을 닫음, 출력 버퍼도 지워짐 |
FileWriter
파일에 문자 단위로 자료를 쓰는 스트림 클래스
출력 파일이 존재하지 않으면 파일 생성
FileWriter 생성자
메소드 | 설명 |
---|---|
FileWriter(String name) | 파일 이름(경로 포함) name을 매개변수로 받아 출력 스트림 생성 write()메소드 사용시 같은 파일에 덮어서 씀 |
FileWriter(String name, boolean append) | 파일 이름(경로 포함) name을 매개변수로 받아 출력 스트림 생성 append 값이 true이면 파일 스트림을 닫았다가 다시 생성할 때 같은 파일의 끝에 이어서 씀, 기본값은 false |
FileWriter(File f) | File 클래스 객체를 매개변수로 받아 출력 스트림 생성 |
FileWriter(File f, boolean append) | File 클래스 객체를 매개변수로 받아 출력 스트림 생성 append 값이 true이면 파일 스트림을 닫았다가 다시 생성할 때 같은 파일의 끝에 이어서 씀, 기본값은 false |
예제_FileReader & FileWriter
FileWriter 로 txt파일 작성 후, FileReader로 해당 파일을 불러 옴
package j200206;
// IO에 필요한 클래스 전부 import
import java.io.*;
public class ReaderTest {
// 입출력 메소드 사용시 반드시 예외 처리를 해주어야 함
public static void main(String[] args) throws IOException {
// FileWriter 스트림 객체 생성, 작성할 파일 연결
FileWriter fw = new FileWriter("ReadMe.txt");
// 파일에 내용 작성
fw.write("FileWriter 스트림으로 작성된 파일입니다.");
// fw 스트림 사용 후 메모리에서 해제
fw.close();
// FileReader 스트림 객체 생성, 불러올 파일 연결
FileReader fr = new FileReader("ReadMe.txt");
// 불러온 자료를 임시로 저장할 변수 선언
int i = 0; // 숫자로 불러오기 때문에 자료형은 int
// 읽어들인 데이터 출력
while (true) {
i = fr.read();
// 읽은 데이터가 없는 경우 while문 탈출
if (i == -1)
break;
// 자료형이 int형이기 때문에 char형으로 형변환 후 출력
System.out.print((char) i);
}
// fr 스트림 사용 후 메모리에서 해제
fr.close();
}
/*
결과
FileWriter 스트림으로 작성된 파일입니다.
*/
}
데이터를 문자 단위로 읽고 쓰는 스트림인 문자 단위 스트림에 대해 알아보았습니다.
한글의 경우 한 자당 2바이트를 차지하기 때문에
FileInputStream, FileOutputStream 으로 데이터를 읽고 쓰는 경우 글자가 깨지는 것을 확인할 수 있습니다.
따라서 한글과 같이 영어가 아닌 문자를 파일에서 불러오거나 파일에 작성할 때는
FileReader와 FileWriter 스트림을 유용하게 사용할 수 있겠습니다.