본문 바로가기
Database Study

FileReader와 BufferedReader

by xogns93 2024. 8. 12.

Java에서 FileReader BufferedReader는 파일로부터 텍스트 데이터를 읽어들이는 데 사용됩니다. FileReader는 파일을 읽기 위한 기본적인 클래스이고, BufferedReader는 파일을 효율적으로 읽기 위해 FileReader에 버퍼링 기능을 추가한 클래스입니다. 이 두 클래스는 파일 입출력 작업에서 자주 사용됩니다.

 

1. FileReader                 

FileReader는 파일로부터 문자 데이터를 읽기 위한 기본 클래스입니다. 파일을 문자 단위로 읽으며, 바이트 스트림을 문자 스트림으로 변환하는 역할을 합니다.

예시

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

public class FileReaderExample {
    public static void main(String[] args) {
        FileReader reader = null;
        try {
            // FileReader를 사용하여 파일 열기
            reader = new FileReader("example.txt");

            int character;
            // 파일로부터 한 문자씩 읽어들이기
            while ((character = reader.read()) != -1) {
                System.out.print((char) character);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (reader != null) {
                    reader.close(); // FileReader 닫기
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }
}

이 코드에서는 FileReader를 사용하여 "example.txt" 파일을 읽습니다. read() 메서드는 파일에서 한 문자씩 읽어오며, 더 이상 읽을 문자가 없으면 -1을 반환합니다.

 

 

2. BufferedReader

BufferedReader는 FileReader에 버퍼링 기능을 추가하여 더 효율적으로 파일을 읽을 수 있도록 합니다. 기본적으로 파일을 한 줄씩 읽어들이는 기능을 제공합니다. BufferedReader를 사용하면 파일 읽기 속도가 향상되며, 줄 단위로 파일을 처리하기에 매우 유용합니다.

 

예시 :

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

public class BufferedReaderExample {
    public static void main(String[] args) {
        BufferedReader reader = null;
        try {
            // FileReader를 BufferedReader로 감싸서 사용
            reader = new BufferedReader(new FileReader("example.txt"));

            String line;
            // 파일로부터 한 줄씩 읽어들이기
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (reader != null) {
                    reader.close(); // BufferedReader 닫기
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }
}

이 코드에서는 BufferedReader를 사용하여 "example.txt" 파일을 한 줄씩 읽어옵니다. readLine() 메서드는 파일에서 한 줄씩 읽어들이며, 더 이상 읽을 줄이 없으면 null을 반환합니다.

 

3. FileReader와 BufferedReader의 차이점

  • 효율성: FileReader는 문자 단위로 파일을 읽기 때문에 상대적으로 비효율적일 수 있습니다. 반면, BufferedReader는 버퍼를 사용해 대량의 데이터를 한 번에 읽어들이기 때문에 더 효율적입니다.
  • 줄 단위 처리: BufferedReader는 readLine() 메서드를 제공하여 파일을 줄 단위로 읽을 수 있습니다. FileReader만을 사용해서는 이 기능을 구현하기 어렵습니다.
  • 사용 용도: 작은 파일을 읽을 때는 FileReader만으로도 충분할 수 있지만, 대용량 파일을 읽거나 줄 단위로 데이터를 처리해야 할 때는 BufferedReader를 사용하는 것이 좋습니다.

4. 예외 처리와 자원 관리

파일을 다룰 때는 반드시 예외 처리와 자원 관리에 신경 써야 합니다. 위의 예제들에서는 try-catch-finally 블록을 사용해 파일을 열고, 예외가 발생해도 파일을 안전하게 닫도록 했습니다. Java 7 이상에서는 try-with-resources 구문을 사용하면 더 간단하게 자원을 관리할 수 있습니다.

 

 

try-with-resources 예시

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

public class TryWithResourcesExample {
    public static void main(String[] args) {
        // try-with-resources를 사용한 파일 읽기
        try (BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) {
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

이 방식에서는 BufferedReader가 자동으로 닫히기 때문에 finally 블록이 필요 없습니다. try-with-resources는 파일 입출력 작업에서 자주 사용되며, 코드의 가독성과 안정성을 높여줍니다.

'Database Study' 카테고리의 다른 글

데이터베이스 트랜잭션에서 ACID  (0) 2024.08.14
CRUD 작업(커밋하는 순간 어떤일이 일어나나)  (0) 2024.08.14
UML(Unified Modeling Language)  (0) 2024.08.05
Artifact  (0) 2024.08.05
데이터베이스  (1) 2024.07.29