遍歴指定目录(1 つまたは複数)およびそのすべての子ファイル、Iterator を使用して実行可能
复制番号代番号次のように:
パッケージ archiver.util;
java.io.ファイルをインポートします。
java.util.ArrayListをインポートします。
java.util.Arraysをインポートします。
java.util.Iteratorをインポートします。
java.util.Listをインポートします。
public class FileIterator は Iterator<File>, Iterable<File> を実装します {
プライベート Iterator<String>イテレータ;
プライベート List<String> パス;
private List<File> ディレクトリ;
public FileIterator(List<String> パス) {
this.paths = new ArrayList<String>(paths);
this.dirs = new ArrayList<File>();
this.iterator = this.paths.iterator();
}
public File next() {
ファイル file = null;
if (hasNext()) {
ファイル = 新しいファイル(iterator.next());
if (file.isDirectory()) {
dirs.add(ファイル);
}
}
ファイルを返す;
}
public boolean hasNext() {
if (!iterator.hasNext()) {
パス.クリア();
for (ファイルディレクトリ: dirs) {
for (文字列名 : dir.list()) {
paths.add(dir.getPath()+File.separator+name);
}
}
dirs.clear();
if (paths.size() == 0) {
false を返します。
}
イテレータ = paths.iterator();
}
true を返します。
}
@オーバーライド
パブリック void 削除() {
新しい UnsupportedOperationException() をスローします。
}
@オーバーライド
public Iterator<File> iterator() {
これを返します。
}
public static void main(String[] args) {
FileIterator iter = new FileIterator(Arrays.asList("."));
for (ファイル file : iter) {
System.out.println(ファイル);
}
}
}