-
Java | I/O 문자 단위 스트림JAVA/JAVA 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이면 파일 스트림을 닫았다가
다시 생성할 때 같은 파일의 끝에 이어서 씀, 기본값은 falseFileWriter(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 스트림을 유용하게 사용할 수 있겠습니다.
'JAVA > JAVA' 카테고리의 다른 글
Java | Serialization 직렬화 (0) 2020.02.07 Java | I/O 보조 스트림 (0) 2020.02.06 Java | I/O 바이트 단위 스트림 (0) 2020.02.06 Java | I/O 표준 입출력 (0) 2020.02.06 Java | I/O(Input / Output) 입출력 개요 (0) 2020.02.06