欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java使用iterator遍历指定目录示例分享

程序员文章站 2024-02-27 17:33:33
可以遍历指定目录(一个或多个)及其所有子文件,用iterator实现 复制代码 代码如下:package archiver.util; import java.io.f...

可以遍历指定目录(一个或多个)及其所有子文件,用iterator实现

复制代码 代码如下:

package archiver.util;

import java.io.file;
import java.util.arraylist;
import java.util.arrays;
import java.util.iterator;
import java.util.list;

public class fileiterator implements iterator<file>, iterable<file> {
 private iterator<string> iterator;
 private list<string>  paths;
 private list<file>   dirs;

 public fileiterator(list<string> paths) {
  this.paths = new arraylist<string>(paths);
  this.dirs = new arraylist<file>();
  this.iterator = this.paths.iterator();
 }

 public file next() {
  file file = null;
  if (hasnext()) {
   file = new file(iterator.next());
   if (file.isdirectory()) {
    dirs.add(file);
   }
  }
  return file;
 }

 public boolean hasnext() {
  if (!iterator.hasnext()) {
   paths.clear();

   for (file dir : dirs) {
    for (string name : dir.list()) {
     paths.add(dir.getpath()+file.separator+name);
    }
   }
   dirs.clear();

   if (paths.size() == 0) {
    return false;
   }
   iterator = paths.iterator();
  }
  return true;
 }

 @override
 public void remove() {
  throw new unsupportedoperationexception();
 }

 @override
 public iterator<file> iterator() {
  return this;
 }

 public static void main(string[] args) {
  fileiterator iter = new fileiterator(arrays.aslist("."));
  for (file file : iter) {
   system.out.println(file);
  }
 }
}