Ich möchte alle Dateien auf meinem Computer Java rekursiv 8.rekursive Strom
Java 8 stellt eine listFiles
Methode aufzulisten, die die Dateien und Verzeichnisse alle, aber ohne Rekursion zurückgibt. Wie kann ich es verwenden, um eine vollständige rekursive Liste von Dateien zu erhalten (ohne eine mutierende Sammlung zu verwenden)?
Ich habe den Code unten versucht, aber es geht nur eine Ebene tiefer:
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);
}
Und return Files.list(p).flatMap(listFiles);
mit nicht kompiliert (nicht sicher, warum) ...
Hinweis: Ich bin nicht interessiert in Lösungen mit FileVisitors oder externen Bibliotheken.
'Files.walkFileTree'? Oder möchten Sie wirklich nur einen rekursiven Stream verwenden? :-) –
@StuartMarks Ja, ich möchte nur einen rekursiven Stream verwenden! Und WalkFileTree ist ziemlich ausführlich, also habe ich versucht, einen "Einzeiler" zu finden. – assylias
Whoops, ich meinte 'Files.walk'. Es nimmt einen Pfad und gibt einen Stream zurück. –