본문 바로가기

자바

[JAVA] Java NIO를 활용한 파일 목록 가져오기

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