我想列出递归使用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'。它需要一个路径并返回一个流。 –