Я хочу перечислить все файлы на моем компьютере рекурсивно, используя Java 8.
Java 8 предоставляет метод listFiles
, который возвращает все файлы и каталоги, но без рекурсии. Как я могу использовать его для получения полного рекурсивного списка файлов (без использования мутировавшей коллекции)?
Я пробовал код ниже, но он идет только на один уровень:
static Function<Path, Stream<Path>> listFiles = p -> {
if (p.toFile().isDirectory()) {
try { return Files.list(p); }
catch (Exception e) { return Stream.empty(); }
} else {
return Stream.of(p);
}
};
public static void main(String[] args) throws IOException {
Path root = Paths.get("C:/temp/");
Files.list(root).flatMap(listFiles).forEach(System.out::println);
}
И использование return Files.list(p).flatMap(listFiles);
не компилируется (не уверен, почему)...
Примечание. Меня не интересуют решения, связанные с FileVisitors или внешними библиотеками.