可以遍歷指定目錄(一個或多個)及其所有子文件,用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> 迭代器;
私有列表<String>路徑;
私有列表<檔案>目錄;
公共 FileIterator(List<String> 路徑) {
this.paths = new ArrayList<String>(paths);
this.dirs = new ArrayList<File>();
this.iterator = this.paths.iterator();
}
公共文件下一個(){
文件文件=空;
如果(hasNext()){
檔案 = 新檔案(迭代器.next());
if (file.isDirectory()) {
dirs.add(文件);
}
}
返回文件;
}
公共布爾 hasNext() {
if (!iterator.hasNext()) {
路徑.clear();
for (檔案目錄: 目錄) {
for (字串名稱: dir.list()) {
paths.add(dir.getPath()+File.separator+name);
}
}
目錄.clear();
if (paths.size() == 0) {
返回假;
}
迭代器 = paths.iterator();
}
返回真;
}
@覆蓋
公共無效刪除(){
拋出新的 UnsupportedOperationException();
}
@覆蓋
公共迭代器<檔案> iterator() {
返回這個;
}
公共靜態無效主(字串[] args){
FileIterator iter = new FileIterator(Arrays.asList("."));
for (檔檔:iter) {
System.out.println(檔);
}
}
}