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' 카테고리의 다른 글
데이터베이스 트랜잭션에서 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 |