Java BufferedReader로 파일 읽기: 실전 가이드와 예제
Java에서 파일 읽는 방법?
Java는 파일 작업을 위한 다양한 I/O 클래스를 제공합니다. 텍스트 파일을 읽는 가장 효율적인 방법은 java.io.BufferedReader를 사용하는 것으로, 하위 레벨 Reader를 감싸고 입력을 버퍼링하여 비용이 큰 시스템 호출을 줄여줍니다.
Java에서 BufferedReader란?
BufferedReader는 파일 같은 입력 스트림에서 텍스트를 문자 단위로 버퍼링하여 읽는 클래스입니다. 이를 통해 각 문자마다 시스템 호출을 하지 않고 빠르게 줄 단위 또는 블록 단위 읽기가 가능합니다.
FileReader나 InputStreamReader의 read() 같은 메서드는 비용이 클 수 있으므로, 이들을 BufferedReader로 감싸 성능을 개선하는 것이 일반적인 관행입니다.
일반적인 사용 패턴:
BufferedReader reader = new BufferedReader(new FileReader("D:\\DukesDiary.txt"));
여기서 파일이 열리고 효율적 읽기를 위해 버퍼링됩니다.
파일 내용을 표시하려면 파일 끝에 도달할 때까지 각 줄을 순회:
String currentLine;
while ((currentLine = reader.readLine()) != null) {
System.out.println(currentLine);
}
루프는 readLine()이 null을 반환하면 종료되며, 이는 파일 끝 도달을 의미합니다.
BufferedReader 예제 (JDK 7 이전)
아래는 리소스 처리의 모범 사례를 보여주는 완전한 프로덕션 준비 예제입니다:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class ReadFileExample {
public static void main(String[] args) {
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader("D:\\DukesDiary.txt"));
String currentLine;
while ((currentLine = reader.readLine()) != null) {
System.out.println(currentLine);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (reader != null) {
reader.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
finally 블록은 예외 발생 시에도 리더가 닫히도록 보장하여 시스템 리소스를 해제합니다.
BufferedReader 예제 (JDK 7+ Try-With-Resources)
Java 7부터 try-with-resources 문으로 정리가 간소화됩니다. 다음 예제는 같은 로직을 더 간결하게 보여줍니다:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class ReadFileExampleJDK7 {
private static final String FILENAME = "D:\\DukesDiary.txt";
public static void main(String[] args) {
try (BufferedReader br = new BufferedReader(new FileReader(FILENAME))) {
String currentLine;
while ((currentLine = br.readLine()) != null) {
System.out.println(currentLine);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
try-with-resources를 사용하면 BufferedReader가 자동으로 닫혀 코드가 더 깔끔하고 에러 발생 가능성이 줄어듭니다.