본문 바로가기

언어/JAVA

[java] Files.walk()를 사용한 파일 시스템 탐색

Java NIO의 Files.walk() 메서드를 사용하여 파일 시스템을 탐색하는 예제 코드를 살펴보겠습니다.

작성 환경

  • Java 버전: JDK 1.8
  • 운영체제: Windows 11

코드 예제

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Stream;

public class FileSystem {
    public static void main(String[] args) {
        try (Stream<Path> paths = Files.walk(Paths.get("D:\\FileSystemTest"))) {
            paths.filter(path -> Files.isRegularFile(path))
                    .forEach(path -> System.out.println(path));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

코드 설명

  • Files.walk(): 주어진 시작 디렉토리부터 모든 하위 디렉토리를 재귀적으로 탐색합니다.
  • Paths.get(): 문자열 경로를 Path 객체로 변환합니다.
  • Files.isRegularFile(): 해당 경로가 일반 파일인지 확인합니다.
  • Stream API를 사용하여 파일 필터링 및 처리를 수행합니다.

코드 실행 결과

  • 폴더 만 있을 경우는 출력하지 않고, 파일 있을 경우에만 출력합니다. -> Files.isRegularFile 필터
D:\FileSystemTest\test1\FileSystemTest.java
D:\FileSystemTest\test2\FileSystemTest2.java

주요 특징

  • try-with-resources 구문을 사용하여 자원을 자동으로 해제
  • Stream API를 활용한 선언적 프로그래밍
  • 개발자가 직접 재귀 함수를 구현할 필요가 없음

사용 시 주의사항

  1. 대용량 디렉토리를 탐색할 때는 메모리 사용량에 주의해야 합니다.
  2. 순환 참조(Symbolic Link)가 있는 경우 무한 루프에 빠질 수 있으므로 적절한 방문 깊이를 설정해야 합니다.
  3. 파일 시스템 접근 권한을 확인해야 합니다.