《Java编程思想》第十八章看到的一个工具类,觉得有些作用,mark一下,主要是对一个指定目录下所有的文件进行遍历,主要代码如下:
public class FileUtils {
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) {
// TODO Auto-generated method stub
return pattern.matcher(name).matches();
}
});
}
public static File[] local(String path,String regex){
return local(new File(path),regex);
}
public static class TreeInfo{
private ArrayList<File> files = new ArrayList<File>();
private ArrayList<File> dirs = new ArrayList<File>();
public void addAll(TreeInfo other){
files.addAll(other.files);
dirs.addAll(other.dirs);
}
public TreeInfo walk(String startDir,String regex){
return recurseDirs(new File(startDir),regex);
}
public TreeInfo walk(File startFile,String regex){
return recurseDirs(startFile,regex);
}
public TreeInfo walk(File startFile){
return recurseDirs(startFile,".*");
}
public TreeInfo recurseDirs(File filename,String regex){
TreeInfo results = new TreeInfo();
File[] filenames = local(filename,regex);
for(File file:filenames){
if(file.isDirectory()){
results.dirs.add(file);
addAll(recurseDirs(file,regex));
}else{
results.files.add(file);
}
}
return results;
}
}
public static void main(String[] args) {
File file = new File("D:\\maven\\helloworld");
System.out.println("|--"+file.getName());
TreeInfo fileTree = new TreeInfo();
TreeInfo tree = fileTree.walk(file);
ptintTree(tree,1);
}
private static void ptintTree(TreeInfo tree,int level) {
String prefix = "";
for(int i = 0;i < level;i++){
prefix += " ";
}
prefix += "|--";
for(File f:tree.dirs){
System.out.println(prefix+f.getName());
ptintTree(new TreeInfo().walk(f),level + 1);
}
for(File f:tree.files){
System.out.println(prefix+f.getName());
}
}
}
用本地的一个maven工程测试输出结果如下:
|--helloworld
|--src
|--main
|--java
|--easymorse
|--com
|--App.java
|--test
|--java
|--easymorse
|--com
|--AppTest.java
|--target
|--classes
|--easymorse
|--com
|--App.class
|--maven-archiver
|--test-classes
|--easymorse
|--com
|--AppTest.class
|--helloworld-1.0-SNAPSHOT.jar
|--.classpath
|--.project
|--pom.xml