《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();
}
}