학습
Java 파일 I/O 기초
Java 파일 I/O 기초 — 중급
파일 I/O 기초
1. 도입 (왜 배워야 하는가)
파일 I/O(Input/Output)는 프로그램이 데이터를 외부 저장소(예: 하드 드라이브)와 주고받는 과정을 의미합니다. 실무에서는 사용자 데이터, 설정 파일, 로그 기록 등을 처리하는 데 필수적입니다. 예를 들어, 웹 애플리케이션에서 사용자 정보를 파일에 저장하거나 불러오는 작업은 빈번하게 발생합니다.
만약 파일 I/O를 모른다면, 프로그램이 종료되더라도 데이터를 잃게 되거나, 다른 시스템과의 데이터 교환이 불가능해집니다. 결국, 사용자가 입력한 정보가 사라지는 일이 발생할 수 있으며, 이는 사용자 경험을 크게 저하시킬 수 있습니다.
2. 핵심 개념 설명
- 파일: 데이터를 저장하는 장소로, 물리적 저장소(하드 드라이브)에서의 데이터 블록입니다.
- 입력(I/O): 프로그램이 외부에서 데이터를 받아들이는 과정입니다.
- 출력(I/O): 프로그램이 외부로 데이터를 내보내는 과정입니다.
관련 용어 정리
| 용어 | 설명 |
|---|---|
| 스트림 | 데이터를 읽거나 쓸 수 있는 연결 경로 |
| 바이트 스트림 | 바이트 단위로 데이터를 처리하는 스트림 |
| 문자 스트림 | 문자 단위로 데이터를 처리하는 스트림 |
실생활 비유로, 파일을 도서관의 책으로 생각할 수 있습니다. 책을 읽는 것은 데이터를 입력받는 것이고, 책을 반환하는 것은 데이터를 출력하는 것입니다.
3. 기본 코드 예제
간단한 파일 쓰기 및 읽기 예제를 살펴보겠습니다.
import java.io.FileWriter;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;
public class FileIOExample {
public static void main(String[] args) {
// 파일에 데이터 쓰기
try (FileWriter writer = new FileWriter("example.txt")) {
writer.write("안녕하세요, 파일 I/O 예제입니다.");
} catch (IOException e) {
e.printStackTrace();
}
// 파일로부터 데이터 읽기
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();
}
}
}
실행 결과
안녕하세요, 파일 I/O 예제입니다.
코드 한 줄씩 동작 설명
import문을 통해 필요한 클래스들을 불러옵니다.FileWriter객체를 생성하여 "example.txt"라는 파일을 만듭니다.write메서드를 사용하여 파일에 문자열을 씁니다.BufferedReader와FileReader를 사용하여 같은 파일을 읽습니다.readLine메서드를 통해 한 줄씩 파일의 내용을 출력합니다.- 파일 경로 문제: 파일 경로가 잘못되면
FileNotFoundException이 발생합니다. - 자원 누수:
try-with-resources구문을 사용하지 않으면 파일 리소스가 해제되지 않아 자원 누수가 발생할 수 있습니다. - 파일 I/O는 외부 데이터 저장 및 처리에 필수적입니다.
- 스트림을 이용하여 데이터를 읽고 쓸 수 있습니다.
- 자원 관리를 위해
try-with-resources구문을 사용하는 것이 좋습니다. - 파일 I/O를 활용한 CSV 파일 처리
- 다양한 파일 포맷(JSON, XML) 읽기 및 쓰기
- 비동기 파일 I/O 처리 방법
4. 실전 활용 예제
예제 1: 사용자 설정 저장
쇼핑몰에서 사용자 설정을 파일에 저장할 때 다음과 같이 구현할 수 있습니다.
import java.io.FileWriter;
import java.io.IOException;
public class UserSettings {
public static void saveSettings(String username, String theme) {
try (FileWriter writer = new FileWriter("user_settings.txt")) {
writer.write("사용자명: " + username + "\n");
writer.write("테마: " + theme + "\n");
} catch (IOException e) {
e.printStackTrace();
}
}
}
예제 2: 로그 기록
서버에서 발생하는 이벤트를 로그 파일에 기록하는 예제입니다.
import java.io.FileWriter;
import java.io.IOException;
import java.time.LocalDateTime;
public class Logger {
public static void logEvent(String event) {
try (FileWriter writer = new FileWriter("event_log.txt", true)) { // true: append 모드
writer.write(LocalDateTime.now() + ": " + event + "\n");
} catch (IOException e) {
e.printStackTrace();
}
}
}
5. 흔한 실수와 주의사항
- 잘못된 코드: new FileWriter("wrong_path/example.txt")
- 올바른 코드: new FileWriter("example.txt") (현재 경로에 생성)
- 잘못된 코드:
FileWriter writer = new FileWriter("example.txt");
writer.write("Hello");
// writer.close() 호출 누락
- 올바른 코드:
try (FileWriter writer = new FileWriter("example.txt")) {
writer.write("Hello");
} // 자동으로 close() 호출
6. 정리
다음에 학습하면 좋은 주제: