Я хочу, чтобы перечислить все файлы на компьютере рекурсивно с использованием 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 или внешними библиотеками.
'Files.walkFileTree'? Или вы действительно просто хотите использовать рекурсивный поток? :-) –
@StuartMarks Да, я просто хочу использовать рекурсивный поток! И walkFileTree довольно многословный, поэтому я пытался найти «однострочный». – assylias
Упс, я имел в виду 'Files.walk'. Он берет Путь и возвращает поток. –