遍历文件系统 java

Iterate through a filesystem java

我有一个关于遍历文件系统树的问题。给定一个队列和一个起始节点,您将如何遍历它?我最初明白这一点,您必须将开始的节点排入队列,但我对如何实现 hasNext() 和 next() 方法感到困惑。这是我必须实现的两种方法,我不希望任何人给我代码,如果你这样做,我将仅作为指导,不会因抄袭而复制。此外,递归不是一种选择,因为使用它会进行深度优先遍历,而不是文件系统所需的广度优先遍历

public boolean hasNext()
public File next()

使用 Queue 实现。假设您从节点头开始。首先把头放在队列中。遍历 head 的所有 children 并将它们放入队列中。在完成 children 之后,移除 head 从队列中获取下一个节点。这个新节点现在将成为头节点。找到它 children 并将其放入队列等等......广告队列遵循 FIFO(先进先出)你可以用它实现 BFS(呼吸优先搜索)。

and to iterate over all the children in head, would I have to use the listFiles() method, or isDirectory()?

正在回复您的评论。假设您有一条起始路径 P1 - head。首先使用 isDirectory() 方法检查它是否是一个目录。如果不是,你的遍历就结束了。如果是,则在该目录上执行 listFiles()。遍历 listFiles() return 的文件,进行处理,仅当 isDirectory() 为 return 为真时才将其添加到队列中。然后从队列中拉取文件并继续处理。