▶ Java File Handling |
Java Files |
Java Create-Write Files |
Java Read Files |
Java Delete Files |
Java Read Files
자바 파일 읽기 (Java Read Files)
자바에서 파일을 읽는 작업은 다양한 방법을 통해 수행될 수 있습니다. 파일을 읽는 주요 방법으로는 FileReader
,
BufferedReader
, Scanner
, 그리고
Files
클래스 등이 있습니다. 각각의 방법은 상황에 맞게 선택할 수 있으며, 파일의 크기나 처리 속도에 따라 적합한 방식이 다를 수 있습니다.
1. FileReader
를 사용한 파일 읽기
FileReader
클래스는 자바에서 파일을 읽는 기본적인 방법 중 하나입니다. 문자 기반 스트림으로 텍스트 파일을 읽기에 적합합니다. 하지만, 대용량
파일을 처리할 때는 **BufferedReader
**와 같이 버퍼링을 지원하는 클래스를 사용하는 것이 좋습니다.
1.1 FileReader
사용 예제
import java.io.FileReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try {
FileReader reader = new FileReader("example.txt");
int character;
// 한 문자씩 파일을 읽음
while ((character = reader.read()) != -1) {
System.out.print((char) character);
}
reader.close();
} catch (IOException e) {
System.out.println("파일을 읽는 중 오류가 발생했습니다.");
e.printStackTrace();
}
}
}
설명:
read()
메서드는 파일에서 한 문자를 읽고, 더 이상 읽을 문자가 없으면 1을 반환합니다.- 파일을 문자 단위로 읽기 때문에 대용량 파일에는 적합하지 않을 수 있습니다.
2. BufferedReader
를 사용한 파일 읽기
- *
BufferedReader
*는 파일을 더 효율적으로 읽기 위해 버퍼링을 지원하는 클래스입니다. 이 클래스는 한 번에 여러 문자를 읽어 처리 속도가 빠르고, 줄 단위로 파일을 읽을 수 있는 기능을 제공합니다.
2.1 BufferedReader
사용 예제
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try {
BufferedReader reader = new BufferedReader(new FileReader("example.txt"));
String line;
// 줄 단위로 파일을 읽음
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
} catch (IOException e) {
System.out.println("파일을 읽는 중 오류가 발생했습니다.");
e.printStackTrace();
}
}
}
설명:
readLine()
메서드는 파일에서 한 줄씩 읽습니다. 읽을 줄이 없으면 **null
*을 반환합니다.- 대용량 파일 처리에 적합하며, 파일을 줄 단위로 처리할 수 있습니다.
3. Scanner
클래스를 사용한 파일 읽기
Scanner
클래스는 파일을 읽을 때 토큰 단위로 처리할 수 있는 기능을 제공합니다. 주로 텍스트 파일에서 특정 패턴이나
형식에 맞춰 데이터를 추출할 때 유용합니다.
3.1 Scanner
사용 예제
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
try {
File file = new File("example.txt");
Scanner scanner = new Scanner(file);
// 파일의 모든 줄을 읽음
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
System.out.println(line);
}
scanner.close();
} catch (FileNotFoundException e) {
System.out.println("파일을 찾을 수 없습니다.");
e.printStackTrace();
}
}
}
설명:
hasNextLine()
: 파일에서 다음 줄이 있는지 확인하는 메서드로, 파일의 끝까지 반복적으로 읽을 수 있습니다.- *
Scanner
*는 형식화된 데이터를 읽는 데 유용하며, 정수, 문자열, 공백 등 특정 패턴을 기준으로 데이터를 처리할 수 있습니다.
4. Files
클래스를 사용한 파일 읽기
자바 7에서 도입된
클래스는 간편하게 파일을 읽고 쓸 수 있는 유틸리티 메서드를 제공합니다. 이 클래스는 파일의 모든 내용을 한 번에 읽어 리스트나 문자열로 반환할 수 있습니다..nio.file.Files
4.1 Files.readAllLines()
사용 예제
Files.readAllLines()
메서드는 파일의 모든 줄을 리스트로 읽습니다.
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
public class Main {
public static void main(String[] args) {
try {
// 파일의 모든 줄을 리스트로 읽음
List<String> lines = Files.readAllLines(Paths.get("example.txt"));
for (String line : lines) {
System.out.println(line);
}
} catch (IOException e) {
System.out.println("파일을 읽는 중 오류가 발생했습니다.");
e.printStackTrace();
}
}
}
설명:
readAllLines()
: 파일의 모든 줄을 읽어서 리스트로 반환합니다. 파일이 매우 클 경우 메모리 문제를 일으킬 수 있으므로 적당한 크기의 파일에 사용해야 합니다.
4.2 Files.readAllBytes()
사용 예제
Files.readAllBytes()
메서드는 파일을 바이트 배열로 읽어옵니다. 이 방법은 텍스트 파일뿐만
아니라 바이너리 파일에도 유용합니다.
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
public class Main {
public static void main(String[] args) {
try {
// 파일의 모든 내용을 바이트 배열로 읽음
byte[] bytes = Files.readAllBytes(Paths.get("example.txt"));
// 바이트 배열을 문자열로 변환하여 출력
String content = new String(bytes);
System.out.println(content);
} catch (IOException e) {
System.out.println("파일을 읽는 중 오류가 발생했습니다.");
e.printStackTrace();
}
}
}
설명:
readAllBytes()
: 파일을 바이트 배열로 읽습니다. 텍스트 파일뿐만 아니라 이미지나 비디오 같은 바이너리 파일에도 사용할 수 있습니다.
5. 파일 읽기 시 예외 처리
파일 읽기 작업에서는 **IOException
**이나 FileNotFoundException
등의 예외가 발생할 수
있습니다. 파일이 존재하지 않거나, 읽기 권한이 없을 때 예외가 발생하므로 이를 처리하는 것이 중요합니다.
5.1 파일 예외 처리 예제
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try {
BufferedReader reader = new BufferedReader(new FileReader("nonexistent_file.txt"));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
} catch (IOException e) {
System.out.println("파일을 읽는 중 오류가 발생했습니다: " + e.getMessage());
}
}
}
주요 예외:
FileNotFoundException
: 파일이 존재하지 않을 때 발생.IOException
: 파일 입출력 작업 중에 발생하는 일반적인 예외.
6. 파일 읽기 방법 요약
자바에서 파일을 읽는 방법은 다양한 방식으로 제공되며, 파일 크기와 성능 요구 사항에 따라 적합한 방법을 선택해야 합니다.
방법 | 장점 | 단점 |
---|---|---|
FileReader |
문자 단위로 파일을 읽기 쉽고 간단 | 대용량 파일에는 성능이 저하될 수 있음 |
BufferedReader |
버퍼링을 통해 성능이 개선, 줄 단위로 읽기 | 약간의 추가 메모리 사용 |
Scanner |
텍스트 파일에서 토큰 단위로 데이터를 읽기 | 대규모 파일 처리에 비효율적일 수 있음 |
Files 클래스 |
전체 파일을 한 번에 읽어 처리 | 매우 큰 파일 처리 시 메모리 문제 발생 |
요약
- *
FileReader
*는 텍스트 파일을 읽을 때 사용할 수 있지만, 큰 파일에는 적합하지 않을 수 있습니다. - *
BufferedReader
*는 버퍼링을 사용하여 파일을 줄 단위로 효율적으로 읽습니다. - *
Scanner
*는 파일을 형식화된 방법으로 읽을 때 유용하며, 데이터를 토큰 단위로 처리할 수 있습니다. Files
클래스는 자바 7부터 제공되며, 파일을 간편하게 읽고 쓸 수 있는 유틸리티 메서드를 제공합니다.
각 방법의 특성에 맞
게 파일을 읽고 처리할 수 있으며, 파일 크기와 형식에 따라 적절한 방식을 선택하여 사용할 수 있습니다.