Как реализовать метод для возврата итератора файлов в Java - PullRequest
5 голосов
/ 24 апреля 2009

Я хочу реализовать такой метод:

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 мне пришлось написать много сложного кода, чтобы сделать это. Есть ли хорошее решение этой проблемы?

Редактировать: Я хочу, чтобы возвращаемый Итератор был "ленивым", т. Е. Возвращать новый Файл только при вызове next(). (Это поведение, которое предлагает C # yield return.)

Ответы [ 3 ]

5 голосов
/ 24 апреля 2009

Этот код может быть вашим решением http://snippets.dzone.com/posts/show/3532

3 голосов
/ 24 апреля 2009

Apache Commons FileUtils предлагает итератор методы для перебора каталогов и подкаталогов. Это делает то, что вы хотите и должно сэкономить вам много работы.

, например

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

чтобы найти все файлы .csv ниже текущего каталога.

0 голосов
/ 24 апреля 2009

Возможно, я что-то пропустил, но почему бы вам не сделать свой собственный итератор? класс, который реализует итератор. Тогда вам просто нужно реализовать ленивый Метод next () в вашем итераторе.

...