类
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;
}