ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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이면 파일 스트림을 닫았다가
    다시 생성할 때 같은 파일의 끝에 이어서 씀, 기본값은 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 스트림을 유용하게 사용할 수 있겠습니다.

    '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

    댓글

Designed by Tistory.