可以遍历指定目录(一个或多个)及其所有子文件,用Iterator实现
复制代码代码如下:
pacote arquivador.util;
importar java.io.File;
importar java.util.ArrayList;
importar java.util.Arrays;
importar java.util.Iterator;
importar java.util.List;
classe pública FileIterator implementa Iterator<Arquivo>, Iterable<Arquivo> {
iterador privado<String>iterador;
private List<String>caminhos;
private List<Arquivo>dirs;
public FileIterator(List<String> caminhos) {
this.paths = new ArrayList<String>(caminhos);
this.dirs = new ArrayList<Arquivo>();
this.iterator = this.paths.iterator();
}
arquivo público próximo() {
Arquivo arquivo = null;
if (hasNext()) {
arquivo = novo arquivo(iterator.next());
if (arquivo.isDirectory()) {
dirs.add(arquivo);
}
}
arquivo de retorno;
}
público booleano hasNext() {
if (!iterator.hasNext()) {
caminhos.clear();
for (diretório do arquivo: dirs) {
for (Nome da string: dir.list()) {
paths.add(dir.getPath()+Arquivo.separador+nome);
}
}
dirs.clear();
if (caminhos.size() == 0) {
retornar falso;
}
iterador = caminhos.iterador();
}
retornar verdadeiro;
}
@Substituir
public void remover() {
lançar new UnsupportedOperationException();
}
@Substituir
public Iterator<Arquivo> iterador() {
devolva isso;
}
public static void main(String[] args) {
FileIterator iter = new FileIterator(Arrays.asList("."));
for (arquivo arquivo: iter) {
System.out.println(arquivo);
}
}
}