package tools.utils;
import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Pattern;
public class Directory {
public static File[] local(File dir,final String regex){
return dir.listFiles(new FilenameFilter() {
Pattern pattern = Pattern.compile(regex);
@Override
public boolean accept(File dir, String name) {
return pattern.matcher(name).matches();
}
});
}
public static File[] local(String filename,String regex){
return local(new File(filename),regex);
}
public static class TreeInfo implements Iterable<File>{
public List<File> files = new ArrayList();
public List<File> dirs = new ArrayList();
public Iterator iterator(){
return files.iterator();
}
void addAll(TreeInfo treeInfo){
files.addAll(treeInfo.files);
dirs.addAll(treeInfo.dirs);
}
@Override
public String toString() {
return "TreeInfo{" +
"files=" + files +
", dirs=" + dirs +
'}';
}
public static TreeInfo recurseDirs(File startDir,String regex) {
TreeInfo result = new TreeInfo();
if (startDir.listFiles() != null){
for (File file : startDir.listFiles()) {
if (file.isDirectory()) {
result.dirs.add(file);
result.addAll(recurseDirs(file, regex));
} else {
if (file.getName().matches(regex))
result.files.add(file);
}
}
}
return result;
}
public static TreeInfo walk(String start,String regex){
return recurseDirs(new File(start),regex);
}
public static TreeInfo walk(File start,String regex){
return recurseDirs(start,regex);
}
public static TreeInfo walk(File start){
return recurseDirs(start,".*");
}
public static TreeInfo walk(String start){
return recurseDirs(new File(start),".*");
}
public static void main(String[] args){
for(File file:local(".",".*")){
System.out.println(file);
}
for(File file:walk("/usr/local/",".*")){
System.out.println(file);
}
}
}
}
local方法和walk方法都有两个参数,第一个是根目录,第二个是正则表达式.