递归查找文件夹与所有文件-java基础

来源:互联网 发布:奥登nba健康数据 编辑:程序博客网 时间:2024/06/17 11:59

《Thinking in java》中例子的简化版

package java1.myFile;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;/** * Created by asus on 2017/9/6. */public final class myDirectory {    public static class TreeInfo implements Iterable<File> {        public List<File> files = new ArrayList<>();        public List<File> dirs = new ArrayList<>();        @Override        public String toString() {        //PPrint.pformat:格式化输出            return "TreeInfo{" +                    "files=" + PPrint.pformat(files) +                    ", dirs=" +  PPrint.pformat(dirs) +                    '}';        }        @Override        public Iterator<File> iterator() {            return files.iterator();        }        void addAll(TreeInfo other) {            files.addAll(other.files);            dirs.addAll(other.dirs);        }        //可自定义多种重载方法,使regex有意义        public static TreeInfo walk(String start) {            return recurseDirs(new File(start), ".*");        }        static TreeInfo recurseDirs(File startDir, String regex) {            TreeInfo info = new TreeInfo();            for (File item : startDir.listFiles()) {                if (item.isDirectory()) {                    info.dirs.add(item);                    info.addAll(recurseDirs(item, regex));                } else {                    //可添加regex匹配                    info.files.add(item);                }            }            return info;        }        public static void main(String[] args) {            System.out.println(walk("."));        }    }}

格式化输出

package java1.myFile;import java.util.Collection;/** * Created by asus on 2017/9/6. */public class PPrint {    public static String pformat(Collection<?> c){        StringBuilder sb=new StringBuilder("[");        for(Object item:c){            if(c.size()>1){                sb.append("\n  ");            }            sb.append(item);        }        if(c.size()>1){            sb.append("\n  ");        }        sb.append("]");        return sb.toString();    }}