2015-10-04 3 views
3

Я хочу получить все каталоги & подкаталоги, начиная с текущего.Как исследовать все подкаталоги с Java 8?

Я нашел один подход для достижения этого с помощью flatMap(). Но она имеет один уровень:

List<File> files = 
      Stream.of(new File(".").listFiles()) 
        .flatMap(file -> file.listFiles() == null ? 
          Stream.of(file) : Stream.of(file.listFiles())) 
        .collect(toList()); 
    System.out.println("Count: " + files.size()); 
    files.forEach(path -> System.out.println("Path: " + path)); 

Если я буду иметь следующий проект struckture:

enter image description here

он будет показывать только:

Путь: ./test/next1

Как добиться этого с Java 1.8 полным и глубоким следующим

Путь: ./test/next1/next2/next3

ответ

3

Использование Files.walk:

List<Path> files = Files.walk(Paths.get(".")).collect(Collectors.toList()); 
System.out.println("Count: " + files.size()); 
files.forEach(System.out::println); 

Обратите внимание, что это решение имеет проблему: если вы сталкиваетесь с каким-либо исключением во время обхода (например, доступ запрещен к какой-либо вложенной папке), он немедленно завершится с ошибкой, и нет простого способа восстановить walkin г. Проверьте, например, this question. Если восстановление после исключения в вашем случае не является необходимым, это решение будет работать нормально.

Смежные вопросы