2009-04-24 82 views
5

递归返回文件的迭代器我想实现这样的方法:如何实现方法在Java

public Iterator<File> getFiles(String root) { 
    // return an Iterator looping through all files in root and all files in sub-directories of roots (recursively) 
} 

在C#中,这可以很容易地与yield return关键字来实现。在Java中,我怀疑我必须编写大量复杂的代码才能完成。有没有解决这个问题的好方法?

编辑:我想返回的Iterator是“懒”,即只有在调用next()时才返回一个新文件。 (这是C#的行为yield return提供的行为。)

+0

你能解释一下为什么你想让它变懒吗? – 2009-04-24 11:44:40

+1

因为我不一定要经历所有的下一个(),我可能想在两者之间停下来(即用户单击“停止”)。如果我们不需要,那么非常深的目录结构的急切加载是昂贵的。 – 2009-04-24 14:50:44

回答

3

Apache Commons FileUtils offer iterator方法遍历目录和子目录。这就是你想要的,应该为你节省很多工作。

例如

Iterator fi = iterateFiles(new File("."), String[] {".csv"}, true)

寻找当前目录下的所有文件的.csv。

+1

当我查看源代码时,事实证明,代码将所有文件添加到集合中,最后调用该集合的iterator()方法。我想要一个懒惰的,不渴望加载迭代器。我已更新原始帖子。 感谢您提出这个问题,在其他场合会非常方便。 – 2009-04-24 10:27:15

0

我可能错过了一些东西,但你为什么不只是让你自己的迭代 类,它实现迭代器。那么你只需要在迭代器中实现一个惰性的 next()方法。