파일 읽기/쓰기는 Java 개발자가 반드시 익혀야 하는 기능입니다.
로그 저장, 설정 파일 파싱, 간단한 데이터 저장 등 다양한 곳에서 활용됩니다.이번 글에서는 가장 많이 사용되는
File, FileReader, BufferedReader, FileWriter 중심으로
파일 입출력의 핵심 기능을 쉽고 정확하게 정리합니다.
📌 목차
- 파일 입출력이란?
- File 클래스
- 텍스트 파일 읽기(FileReader)
- BufferedReader로 효율적 읽기
- 텍스트 파일 쓰기(FileWriter)
- try-with-resources — 자동으로 닫기
- 파일 존재 확인/삭제
- 실전 예제
- 자주 하는 실수
- 대표 태그
1️⃣ 파일 입출력이란?
File I/O(Input/Output)은 파일을 읽고 쓰는 작업을 의미합니다.
기본 흐름:
- 읽기: File → Reader → BufferedReader
- 쓰기: File → Writer
Java는 파일 작업에 여러 클래스를 제공하지만,
텍스트 기반에서는 아래 4개가 가장 많이 사용됩니다.
✔ File
✔ FileReader
✔ BufferedReader
✔ FileWriter
2️⃣ File 클래스 — 파일 자체를 의미
파일이 실제로 있든 없든 파일의 경로를 표현하는 역할입니다.
File file = new File("test.txt");
파일 존재 여부 확인:
file.exists(); // true or false
파일 정보 출력 :
file.getName();
file.getAbsolutePath();
file.length();
3️⃣ 파일 읽기 — FileReader
FileReader는 문자 단위로 파일 읽기를 지원합니다.
FileReader fr = new FileReader("test.txt");
int data;
while ((data = fr.read()) != -1) {
System.out.print((char) data);
}
fr.close();
하지만 단독으로 쓰면 비효율적이기 때문에
실무에서는 대부분 BufferedReader와 함께 사용합니다.
4️⃣ 파일 읽기 — BufferedReader (가장 많이 사용)
줄 단위로 빠르게 읽을 수 있기 때문에 가장 실용적입니다.
BufferedReader br = new BufferedReader(new FileReader("test.txt"));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();
✔ readLine()은 개행문자(\n)를 제거한 문자열 반환
-> 파일 분석에 매우 유용
5️⃣ 파일 쓰기 — FileWriter
FileWriter fw = new FileWriter("output.txt");
fw.write("Hello Java\n");
fw.write("FileWriter 예제입니다.");
fw.close();
✔ 기존 내용을 덮어씀
기존 내용을 유지하며 추가하고 싶다면:
FileWriter fw = new FileWriter("output.txt", true); // append mode
6️⃣ try-with-resources — close 자동 처리
Java 7 이후 제공되는 자동 자원 해제 구문입니다.
try (BufferedReader br = new BufferedReader(new FileReader("test.txt"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
➡ close()를 직접 호출할 필요 없음
➡ 예외가 발생해도 자동으로 파일 스트림이 닫힘
7️⃣ 파일 존재 여부 & 삭제하기
✔ 파일 존재 확인
File file = new File("data.txt");
if (file.exists()) {
System.out.println("파일 존재");
}
✔ 삭제하기
file.delete();
삭제 성공 여부는 boolean으로 반환됨.
8️⃣ 실전 예제 — 로그 파일 읽고 가공하기
try (BufferedReader br = new BufferedReader(new FileReader("log.txt"))) {
String line;
int errorCount = 0;
while ((line = br.readLine()) != null) {
if (line.contains("ERROR")) {
errorCount++;
}
}
System.out.println("에러 개수: " + errorCount);
} catch (IOException e) {
e.printStackTrace();
}
➡ 실무에서 정말 자주 등장하는 패턴입니다.
9️⃣ 자주 하는 실수
❌ 한글 파일을 읽는데 깨짐
→ InputStreamReader + UTF-8 필요 (다음 글에서 추가 설명 가능)
❌ close() 누락
→ 메모리 누수 발생
→ 반드시 try-with-resources 사용 추천
❌ write 후 flush 안 함
→ 실제 파일에 완전히 기록되지 않을 수 있음
FileWriter는 close 시 자동 flush되지만
BufferedWriter 사용 시 flush 필요.
🔟 마무리
이번 글에서는 Java 텍스트 파일 입출력의 핵심을 정리했습니다.
✔ File 클래스
✔ FileReader / BufferedReader
✔ FileWriter
✔ 줄 단위 읽기
✔ append 모드
✔ 파일 존재 확인/삭제
✔ try-with-resources
다음 글에서는 Java의 최신 문법 기반인
람다(Lambda) & Stream을 정리합니다.
컬렉션을 훨씬 쉽게 다루게 되고,
Spring과 실무 개발에서도 매우 중요합니다.
📘 다음 글 예고
👉 Java 람다(Lambda) & Stream 완전 이해
'개발(React | Java) > 자바 기초 | 문법' 카테고리의 다른 글
| 📘 Spring Boot 입문 (1) 스프링(Spring) & 스프링부트(Spring Boot) 완전 이해 — 개념부터 첫 프로젝트까지 (0) | 2025.12.10 |
|---|---|
| 📘 Java 람다 & Stream (3) 람다식(Lambda) & Stream 완전 이해 — 실무 컬렉션 처리의 핵심 (1) | 2025.12.10 |
| 📘 Java 예외 처리 (1) 예외(Exception) 처리 기초 — try/catch, throw, finally 완전 정리 (0) | 2025.12.09 |
| 컬렉션 프레임워크(List, Set, Map) 기초 — 배열을 넘어선 자료구조 (0) | 2025.12.08 |
| 인터페이스(Interface) & 추상 클래스(Abstract Class) 완전 정리 — OOP 핵심 (0) | 2025.12.08 |