我想实现这样的方法:
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 :(得分:5)
此代码可能是您的解决方案http://snippets.dzone.com/posts/show/3532
答案 1 :(得分:3)
Apache Commons FileUtils提供iterator方法来遍历目录和子目录。这样做你想要的,应该为你节省很多工作。
e.g。
Iterator fi = iterateFiles(new File("."), String[] {".csv"}, true)
查找当前目录下的所有.csv文件。
答案 2 :(得分:0)
我可能错过了一些东西,但你为什么不做自己的迭代器呢? 实现迭代器的类。然后你只需要实现一个懒惰 迭代器中的next()方法。