package jvm.loader;
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 john on 2017/4/17.
*
* @// TODO: 2017/4/20 实现 List.addAll(), list implements Iterable
*/
public final class Directory {
public static File[] local(File dir, final String regex) {
return dir.listFiles(new FilenameFilter() { // 文件过滤接口
private Pattern pattern = Pattern.compile(regex);
@Override
public boolean accept(File dir, String name) {
return pattern.matcher(new File(name).getName()).matches();
}
});
}
public static File[] local(String path, final String regex) {
return local(new File(path), regex);
}
public static class TreeInfo implements Iterable<File> {
public List<File> files = new ArrayList<>();
public List<File> dirs = new ArrayList<>();
@Override
public Iterator<File> iterator() {
return files.iterator();
}
public void addAll(TreeInfo other) {
files.addAll(other.files);
dirs.addAll(other.dirs);
}
@Override
public String toString() {
return "dirs: " + dirs +
"\n\nfiles: " + files;
}
}
public static TreeInfo walk(String start, String regex) {
return recuresDirs(new File(start), regex);
}
public static TreeInfo walk(File start, String regex) {
return recuresDirs(start, regex);
}
public static TreeInfo walk(File start) {
return recuresDirs(start, ".*");// 全部
}
public static TreeInfo walk(String start) {
return recuresDirs(new File(start), ".*");// 全部
}
public static TreeInfo recuresDirs(File startDir, String regex) {
TreeInfo result = new TreeInfo();
for (File item : startDir.listFiles()) {
if (item.isDirectory()) {
result.dirs.add(item);
result.addAll(recuresDirs(item, regex));
} else if (item.getName().matches(regex))
result.files.add(item);
}
return result;
}
}