기본 패턴
java
Path path = Path.of("data", "users.txt");
if (Files.exists(path)) {
List<String> lines = Files.readAllLines(path);
}설명
- 과거 Java에서는
File중심 API를 많이 봤지만, 현대 Java 파일 I/O의 중심은java.nio.file패키지입니다. 여기서Path가 경로 표현을 맡고,Files가 실제 파일 작업을 담당합니다. Path는 파일 시스템 경로를 조합하고, 부모/자식 관계를 계산하고, 상대 경로와 절대 경로를 다루는 값 객체에 가깝습니다.resolve,relativize,normalize같은 메서드를 보면 역할이 분명합니다.Files는 읽기/쓰기, 존재 여부 확인, 복사, 이동, 디렉터리 생성, 디렉터리 순회처럼 실제 작업을 모아 둔 유틸리티 클래스입니다. 즉 "경로를 표현하는 것"과 "경로에 대해 작업하는 것"이 분리됩니다.- 이 분리는 단순한 API 정리 이상의 의미가 있습니다. 파일 경로를 값처럼 다루고, 실제 I/O는 예외와 함께 별도 단계에서 수행하게 해 주기 때문에 코드 구조가 훨씬 읽기 쉬워집니다.
- 실무에서는 설정 파일 읽기, 업로드 경로 생성, 배치 파일 처리, 로그 파일 탐색에서 거의 매번 이 API를 다시 보게 됩니다. 그래서
File보다Path/Files감각을 먼저 잡는 편이 좋습니다.
빠른 정리
| 요소 | 역할 |
|---|---|
Path | 경로 표현 |
Path.of(...) | 경로 생성 |
Files.exists(path) | 존재 여부 확인 |
Files.readAllLines(path) | 파일 전체 줄 읽기 |
Files.createDirectories(path) | 디렉터리 생성 |
주의할 점
경로를 문자열 덧셈으로 직접 만들기 시작하면 운영체제별 구분자와 상대 경로 문제가 쉽게 섞입니다. 경로 자체는 Path로 만들고,
실제 파일 작업은 Files로 분리하는 습관이 더 안전합니다.
참고 링크
3 sources