可以遍历指定目录(一个或多个)及其所有子文件,用Iterator实现
复制代码代码如下:
пакет archiver.util;
импортировать java.io.File;
импортировать java.util.ArrayList;
импортировать java.util.Arrays;
импортировать java.util.Iterator;
импортировать java.util.List;
публичный класс FileIterator реализует Iterator<File>, Iterable<File> {
частный Iterator<String>итератор;
частные пути List<String>;
частный список<файл>каталоги;
public FileIterator (пути List<String>) {
this.paths = новый ArrayList<String>(пути);
this.dirs = новый ArrayList<File>();
this.iterator = this.paths.iterator();
}
публичный файл следующий() {
Файл файл = ноль;
если (hasNext()) {
файл = новый файл (iterator.next());
если (file.isDirectory()) {
dirs.add(файл);
}
}
возвратный файл;
}
общедоступное логическое значение hasNext() {
если (!iterator.hasNext()) {
пути.очистить();
for (Каталог файла: dirs) {
for (Имя строки: dir.list()) {
paths.add(dir.getPath()+File.separator+name);
}
}
dirs.clear();
если (paths.size() == 0) {
вернуть ложь;
}
итератор = paths.iterator();
}
вернуть истину;
}
@Override
общественная недействительность удалить () {
выбросить новое исключение UnsupportedOperationException();
}
@Override
общественный Iterator<File> iterator() {
верните это;
}
public static void main(String[] args) {
FileIterator iter = новый FileIterator(Arrays.asList("."));
for (Файл файл: iter) {
System.out.println(файл);
}
}
}