728x90
728x90
자바 파일 입출력: 상세 가이드
개요
자바에서 파일 입출력은 프로그램과 외부 저장 장치 간의 데이터 교환을 의미합니다. 즉, 프로그램에서 데이터를 파일로 저장하거나, 파일에서 데이터를 읽어와 프로그램에서 사용할 수 있도록 하는 것을 말합니다. 자바는 이러한 파일 입출력 기능을 위한 다양한 클래스와 메소드를 제공합니다.
왜 파일 입출력이 필요할까요?
- 데이터 영구화: 프로그램 실행 중 생성된 데이터를 파일로 저장하여 프로그램 종료 후에도 데이터를 유지할 수 있습니다.
- 대용량 데이터 처리: 메모리에 한 번에 올리기 어려운 대용량 데이터를 파일 단위로 읽고 처리할 수 있습니다.
- 다른 프로그램과의 데이터 공유: 파일 형식으로 데이터를 저장하면 다른 프로그램에서도 해당 데이터를 읽어 사용할 수 있습니다.
자바 파일 입출력의 기본 개념
- 스트림(Stream): 데이터를 순차적으로 읽거나 쓰는 추상적인 개념입니다. 자바에서는 입력 스트림과 출력 스트림으로 나눌 수 있습니다.
- 바이트 스트림: 8비트 단위의 바이트 데이터를 처리하는 스트림입니다. 모든 종류의 데이터를 처리할 수 있습니다.
- 문자 스트림: 문자 단위의 데이터를 처리하는 스트림입니다. 텍스트 파일을 읽고 쓰는 데 주로 사용됩니다.
파일 입출력 클래스
- FileInputStream, FileOutputStream: 바이트 스트림 기반의 파일 입출력 클래스입니다.
- FileReader, FileWriter: 문자 스트림 기반의 파일 입출력 클래스입니다.
- BufferedInputStream, BufferedOutputStream: 버퍼를 이용하여 성능을 향상시킨 바이트 스트림 클래스입니다.
- BufferedReader, BufferedWriter: 버퍼를 이용하여 성능을 향상시킨 문자 스트림 클래스입니다.
파일 입출력 과정
- 스트림 생성: 파일을 열고 스트림 객체를 생성합니다.
- 데이터 읽기/쓰기: 스트림 객체의 메소드를 사용하여 데이터를 읽거나 씁니다.
- 스트림 닫기: 작업이 완료되면 스트림을 닫습니다.
예제: 텍스트 파일 읽기 및 쓰기
import java.io.*;
public class FileIOExample {
public static void main(String[] args) {
try (BufferedReader br = new BufferedReader(new FileReader("input.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) {
String line;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
- try-with-resources: 스트림을 자동으로 닫아주는 편리한 기능입니다.
- BufferedReader: 한 줄씩 읽어오는 데 효율적입니다.
- BufferedWriter: 버퍼를 이용하여 여러 줄을 한 번에 써주는 데 효율적입니다.
파일 입출력 시 주의사항
- 파일 경로: 정확한 파일 경로를 지정해야 합니다.
- 예외 처리: 파일 입출력 중 예외가 발생할 수 있으므로 적절한 예외 처리를 해야 합니다.
- 스트림 닫기: 사용한 스트림은 반드시 닫아줘야 메모리 누수를 방지할 수 있습니다.
- 파일 잠금: 여러 프로그램에서 동시에 파일을 접근할 때는 파일 잠금을 고려해야 합니다.
심화 내용
- 직렬화: 객체를 파일로 저장하고 복원하는 방법입니다.
- NIO: 비동기 입출력을 지원하는 새로운 I/O API입니다.
- 파일 시스템: 파일 시스템 관련 클래스를 이용하여 파일이나 디렉토리에 대한 다양한 작업을 수행할 수 있습니다.
결론
자바 파일 입출력은 다양한 분야에서 활용되는 중요한 기능입니다. 위에서 설명한 내용을 바탕으로 파일 입출력에 대한 이해를 높이고, 실제 프로그램 개발에 적용해 보세요.
728x90
728x90
'Java를 배워보자 > 5. 입출력' 카테고리의 다른 글
자바 콘솔 입출력 (Scanner, PrintStream) (0) | 2024.09.27 |
---|