2009-04-24 65 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()方法。