org.apache.commons.io.DirectoryWalker如何递归遍历

 public class DirectoryTracker extends DirectoryWalker<String> {
    private int bufferSize=100;
    private final List<String> workedBuffer=Collections.synchronizedList(new ArrayList<String>());
    private static final Logger log = LoggerFactory.getLogger(DirectoryTracker.class);

    public DirectoryTracker(FileFilter filter) {
        super(filter,-1);
        // TODO Auto-generated constructor stub
    }
    /**
     * 设置一次处理的结果集大小
     * @param size
     */
    public void setBufferSize(int size){
        this.bufferSize=size;
    }

    @Override
    protected boolean handleDirectory(File directory, int depth, Collection<String> results) throws IOException {
        // TODO Auto-generated method stub
        //这理怎么写
        return true;
    }

    @Override
    protected void handleFile(File file, int depth, Collection<String> results) throws IOException {
        // TODO Auto-generated method stub
        //super.handleFile(file, depth, results);
        results.add(file.getAbsolutePath());
    }

    private List<String> getAllFile(File startDirectory) throws IOException{
        List<String> result=new ArrayList<>(bufferSize);
        walk(startDirectory,result);
        return result;
    }
    //ETC
}

指定一个开始的目录(例:D:\Documents\Pictures),这个目录下有图片也有子目录,子目录的情况如父目录一样,现在这个类不进入子目录,怎样作到无限递归遍历

// TODO Auto-generated method stub
//这理怎么写
if(depth==-1)return;
File[] files=directory.listFiles();
for(File file:files){
if(file.isDirectory()){
handleDirectory(file,depth-1,results);
}else if(filter.accept(file)){
handleFile(file,depth-1,results);
}
}

            手写的,没有编译调试过,大概是这个意思吧

可能我没说白,遍历的入口是一个目录,这个目录的深度未知,我只想取回这个目录下的所有图片,现在的问题是没有进入子目录,只在入口目录下就停了

 public class DirectoryTracker extends DirectoryWalker<String> {
    private int bufferSize=100;
    private final List<String> workedBuffer=Collections.synchronizedList(new ArrayList<String>());
    private static final Logger log = LoggerFactory.getLogger(DirectoryTracker.class);
    private FileFilter filter;
    public DirectoryTracker(FileFilter filter) {
        super(filter,-1);
        // TODO Auto-generated constructor stub
        this.filter=filter;
    }
    /**
     * 设置一次处理的结果集大小
     * @param size
     */
    public void setBufferSize(int size){
        this.bufferSize=size;
    }

    @Override
    protected boolean handleDirectory(File directory, int depth, Collection<String> results) throws IOException {
        // TODO Auto-generated method stub
        //这理怎么写
        if(depth==-1){
            return false;
        }
        File[] files=directory.listFiles();
        for(File file:files){
            if(file.isDirectory()){
                handleDirectory(file,depth-1,results);
            }
            else if(filter.accept(file)){
                handleFile(file,depth-1,results);
            }
        }
        return true;
    }

    @Override
    protected void handleFile(File file, int depth, Collection<String> results) throws IOException {
        // TODO Auto-generated method stub
        //super.handleFile(file, depth, results);
        results.add(file.getAbsolutePath());
    }

    private List<String> getAllFile(File startDirectory) throws IOException{
        List<String> result=new ArrayList<>(bufferSize);
        walk(startDirectory,result);
        return result;
    }
}

搞出来了:

    protected boolean handleDirectory(File directory, int depth, Collection<String> results) throws IOException {
        // TODO Auto-generated method stub
        //这理怎么写
        File[] data=directory.listFiles();
        if(data.length>0){
            System.out.println("T");
            for(File f:data){
                if(f.isFile() && filter.accept(f)){
                    handleFile(f,0,results);
                }
                if(f.isDirectory()){
                    handleDirectory(f,0,results);
                }
            }
        }
        return true;
    }