第1个回答 2012-03-20
/**
* 在dir目录及其子目录中
* 查找符合给定格式的文件
* @param dir 查找的文件夹
* @param regex 文件格式正则表达式
* @return 找到的文件对象数组
*/
public static File[] search(File dir,final String regex){
Deque<File> stack = new LinkedList<File>();
Deque<File> allDir = new LinkedList<File>();
stack.push(dir);
//获得所有文件夹,包括深层目录
while(!stack.isEmpty()){
dir = stack.poll();
allDir.push(dir);
File[] dirs = dir.listFiles(new FileFilter(){
public boolean accept(File f){
return f.isDirectory();//只列出子目录
}
});
for(File f:dirs){
stack.push(f);
}
}
//allDir中所有的目录中匹配的文件
//放入List
ArrayList<File> list = new ArrayList<File>();
while(!allDir.isEmpty()){
File d = allDir.pop();
File[] files = d.listFiles(new FileFilter(){
public boolean accept(File f) {
//目录不要
if(f.isDirectory()) {return false;}
//只要匹配的文件
return f.getName().matches(regex);
}
});
for(File f:files){
list.add(f);
}
}
File[] arr = new File[list.size()];
return list.toArray(arr);
}
第一个参数是路径,第二个匹配文件类型。