《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