언어(Language)/Java

[Java] 자바 파일 입출력 스트림 FileReader와 FileWriter 개념 정리 및 활용

잇트루 2022. 9. 28. 02:00
반응형

FileReader와 FileWriter

FileReader와 FileWriter는 바이트 기반 스트림인 FileInputStream과 FileOutputStream의 단점을 해결하는 문자 기반 스트림이다.

따라서 문자 기반 스트림 FileReader와 FileWriter는 문자 데이터를 다룰 때 사용한다.

 

문자 기반 스트림과 그 하위 클래스는 여러 종류의 인코딩과 자바에서 사용하는 유니코드(UTF-16) 간의 변환을 자동으로 처리한다.

 

바이트 기반 스트림의 FileInputStream은 문자 기반 스트림의 FileReader

바이트 기반 스트림의 FileOutputStream은 문자 기반 스트림의 FileWriter로 대응된다.

 

즉, FileReader는 인코딩을 유니코드로 변환, FileWriter는 유니코드를 인코딩으로 변환한다.

 

FileWriter

FileWriter를 통해 ‘Hello Java!’라는 내용의 텍스트 파일 Java.txt를 생성하는 예제이다.

import java.io.FileWriter;
import java.io.IOException;

public class FileWriterEx {
    public static void main(String[] args) {
        try {
            String fileName = "Java.txt";
            FileWriter writer = new FileWriter(fileName);

            // 파일에 저장할 내용
            String str = "Hello Java!";

            // 파일에 str 작성하기
            writer.write(str);

            // 파일 닫기
            writer.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

FileReader

다음은 위에서 작성한 Java.txt 파일을 프로그램을 통해 읽어오는 예제이다.

import java.io.FileReader;
import java.io.IOException;

public class FileReaderEx {
    public static void main(String[] args) {
        try {
            // 읽어올 파일 이름
            String fileName = "Java.txt";
            FileReader file = new FileReader(fileName);

            int data = 0;
			
            // 차례대로 읽어오기
            while((data=file.read()) != -1) {
                System.out.print((char)data);
            }
            file.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

BufferedReader

바이트 기반 입력 스트림에 BufferedInputStream이라는 보조 스트림을 지원하듯이, FileReader 또한, 문자 기반 입력 스트림에 BufferedReader라는 보조 스트림을 지원한다.

버퍼는 바이트 배열로, 여러 바이트를 저장하여 한 번에 많은 양의 데이터를 입출력할 수 있도록 도와주는 임시저장소이다.

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class FileReaderEx {
    public static void main(String[] args) {
        try {
            String fileName = "Java.txt";
            FileReader file = new FileReader(fileName);
            BufferedReader buffered = new BufferedReader(file);

            int data = 0;

            while((data=buffered.read()) != -1) {
                System.out.print((char)data);
            }
            file.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
반응형