Java8中的深度优先目录流

Java8中的深度优先目录流,java,java-8,java-stream,Java,Java 8,Java Stream,我想使用流API以深度优先顺序遍历Java8中的目录结构。这样做的原因是,我想根据每个文件中每个目录的时间戳对文件中的内容进行排序。本质上,我正在寻找类似的东西,但目录。如何实现这一点?使用是轻而易举的: File root = new File("someFilePath"); StreamEx.ofTree(root, x -> StreamEx.of(x.listFiles(File::isDirectory))) .map(File::getAbsolutePath) //

我想使用流API以深度优先顺序遍历Java8中的目录结构。这样做的原因是,我想根据每个文件中每个目录的时间戳对文件中的内容进行排序。本质上,我正在寻找类似的东西,但目录。如何实现这一点?

使用是轻而易举的:

File root = new File("someFilePath");
StreamEx.ofTree(root, x -> StreamEx.of(x.listFiles(File::isDirectory)))
    .map(File::getAbsolutePath) // or whathever you need to do with the folder
    .forEach(System.out::println); // the same as previous line

很难理解您的问题描述,最明显的是,当您说要“根据每个目录上每个文件中的时间戳对文件中的内容进行排序”时,您实际上想要做什么

当你说你想要“类似于文件的东西,但对于目录来说是走的”,这意味着你在使用
文件时有问题。对于目录来说是走的,但不清楚你有什么问题

也就是说,您可以简单地列出当前目录的所有子目录,如

Files.walk(Paths.get("")).filter(Files::isDirectory).forEach(System.out::println);

因此,如果这与您的目标不匹配,您必须花更多的时间来制定您的目标。

为什么必须使用流API?它不是为递归而设计的。谢谢。我投了赞成票,因为它看起来适合我,但我更喜欢没有任何附加依赖项的vanilla Java,所以我不会将其标记为已解决。可能,仅使用纯流API(如
iterate()
generate()
)是不可行的。最好的办法可能是实现一种预先排序的
TreeIterator
并对其进行流式处理。无论如何,我要添加
StreamEx
dep。它功能强大(请参见
EntryStream
)且体积小得离谱。这是一个救命的办法。虽然听起来很尴尬,但我真的认为这可以,谢谢。