728x90
개요
파일을 읽고, 수정하고, 쓰기 위해서는 파일 위치를 찾아야 한다.
자바에서는 java.nio.file.Files
클래스를 통해 파일 시스템을 객체 지향적으로 다룰 수 있게 해주는 API를 제공한다.
그중 Files.list()
와 Files.walk()
는 디렉토리를 탐색하여, 파일 또는 디렉토리 목록을 스트림(Stream) 형태로 제공하는 대표적인 메서드를 살펴보자
Files.list(Path dir)
특정 디렉토리의 직속 항목들만 나열한다.
즉, 1단계 탐색만 수행하여 하위 폴더 내부까지는 안들어간다.
Stream<Path>
로 반환해눚다.
필터링이나 정렬이 쉽다.
try (Stream<Path> stream = Files.list(Paths.get("C:/data"))) {
stream.forEach(System.out::println);
}
Files.walk(Path start, ...)
시작 경로부터 시작해 하위 디렉토리까지 재귀적으로 탐색한다.
깊이 제한 없이 모든 하위 경로를 따라간다. (기본값은 Integer.Max_VALUE)
Stream<Path>
로 반환해준다.
주요 오버로드는 아래와 같다.
Files.walk(Path start) // 기본: 모든 하위 디렉토리 포함
Files.walk(Path start, int maxDepth) // 탐색 깊이 제한
Files.walk(Path start, int maxDepth, FileVisitOption...) // 추가 옵션 가능 (예: 심볼릭 링크 추적)
try (Stream<Path> stream = Files.walk(Paths.get("C:/data"))) {
stream
.filter(Files::isRegularFile)
.filter(p -> p.toString().endsWith(".txt"))
.forEach(System.out::println);
}
list와 walk 비교
항목 | Files.list() |
Files.walk() |
탐색 범위 | 1단계 (현재 디렉토리만) | 전체 경로 (재귀) |
성능 | 빠름 | 느릴 수 있음 (재귀탐색) |
깊이 제어 | 불가능 | 가능 (maxDepth 설정) |
반환 타입 | Stream<Path> |
Stream<Path> |
하위 폴더 진입 | 안 함 | 자동으로 진입 |
사용 목적 | 현재 폴더 파일 목록 보기 | 전체 디렉토리 구조 탐색, 검색 등 |
728x90
'자바' 카테고리의 다른 글
[JAVA] 스레드 생성 방식과 생명주기 (0) | 2025.04.17 |
---|---|
[JAVA] 멀티스레드란? (0) | 2025.04.17 |
[JAVA] Java Files API를 활용한 텍스트 및 객체 입출력 (0) | 2025.03.21 |
[JAVA] IO, NIO, NIO2 차이점들 (0) | 2025.03.20 |
[JAVA] 스트림 파이프라인(Stream pipeline) (0) | 2025.03.20 |