Java - 특정 경로의 하위 파일, 폴더 탐색 (Files.walk)

이승현·2022년 9월 26일
0

1. 모든 파일, 폴더(디렉토리) 탐색

  • Files.walk() 에 Path 객체를 전달하면 그 경로의 하위 폴더 및 파일들을 탐색할 수 있음
  • 리턴된 Stream을 통해서 List를 생성할 수 있음
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class FilesWalkExample {

    public static void main(String[] args) throws IOException {

        Path dirPath = Paths.get("/home/js/tests");

        List<Path> result;
        Stream<Path> walk = Files.walk(dirPath);
        result = walk.collect(Collectors.toList());

        for (Path path : result) {
            System.out.println(path);
        }

    }
}

2. 파일만 탐색

  • Stream에서 filter(Files::isRegularFile)처럼 필터 조건을 설정하면 List에는 파일에 대한 Path 객체만 추가됨
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class FilesWalkExample2 {

    public static void main(String[] args) throws IOException {

        Path dirPath = Paths.get("/home/js/tests");

        List<Path> result;
        Stream<Path> walk = Files.walk(dirPath);
        result = walk.filter(Files::isRegularFile)
                    .collect(Collectors.toList());

        for (Path path : result) {
            System.out.println(path);
        }

    }
}

3. 폴더(디렉토리)만 탐색

  • Stream에서 filter(Files::isDirectory)처럼 필터 조건을 설정하면 List에는 폴더에 대한 Path 객체만 추가됨
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class FilesWalkExample3 {

    public static void main(String[] args) throws IOException {

        Path dirPath = Paths.get("/home/js/tests");

        List<Path> result;
        Stream<Path> walk = Files.walk(dirPath);
        result = walk.filter(Files::isDirectory)
                    .collect(Collectors.toList());

        for (Path path : result) {
            System.out.println(path);
        }

    }
}

4. 파일 이름으로 파일 찾기

  • filter()에서 파일이름을 비교하여 원하는 파일만 찾을 수 있음
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class FilesWalkExample4 {

    public static void main(String[] args) throws IOException {

        Path dirPath = Paths.get("/home/js/tests");

        String fileName = "ccc.png";
        List<Path> result;
        Stream<Path> walk = Files.walk(dirPath);
        result = walk.filter(Files::isRegularFile)
                    .filter(p -> p.getFileName().toString().equalsIgnoreCase(fileName))
                    .collect(Collectors.toList());

        for (Path path : result) {
            System.out.println(path);
        }

    }
}
  1. 지정된 경로의 바로 하위 경로만 탐색(depth =1)
  • walk()의 두번째 인자로 depth = 1을 전달하면, 지정된 경로의 바로 하위 경로만 탐색함
Stream<Path> walk = Files.walk(dirPath, 1);

0개의 댓글