package com.scnulh.util;
import java.util.List;
import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.regex.Pattern;
public class Directory {
public static class TreeInfo implements Iterable<File>{
public List<File> files=new ArrayList<File>();
public List<File> dirs=new ArrayList<File>();
@Override
public Iterator<File> iterator() {
return files.iterator();
}
void addAll(TreeInfo other)
{
files.addAll(other.files);
dirs.addAll(other.dirs);
}
public String toString()
{
return "dirs:"+PPrint.pformat(dirs)+
"\nfiles:"+PPrint.pformat(files);
}
}
/**
* 递归生成目录及文件树
* @param startDir
* @param regex
* @return
*/
static TreeInfo recurseDirs(File startDir,String regex)
{
TreeInfo result=new TreeInfo();
for(File item:startDir.listFiles())
{
if(item.isDirectory())
{
result.dirs.add(item);
result.addAll(recurseDirs(item, regex));
}
else if(item.getName().matches(regex))
result.files.add(item);
}
return result;
}
public static TreeInfo walk(String start,String regex)
{
return recurseDirs(new File(start), regex);
}
public static TreeInfo walk(File start,String regex)
{
return recurseDirs(start, regex);
}
public static TreeInfo walk(File start)
{
return recurseDirs(start, ".*");
}
public static TreeInfo walk (String start)
{
return recurseDirs(new File(start), ".*");
}
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) {
// TODO Auto-generated method stub
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 void main(String[] args)
{
PPrint.pprint(Directory.walk(".").files);
for(File file:Directory.walk(".", ".*.*\\.class$"))
{
System.out.println(file);
}
}
}