java编程思想 IO2源码

package net.mindview.util;
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;


public final class Directory {


/**
*目录实用工具
*/
//通过local()方法产生由本地目录中的文件构成的File对象数组
public static File[] local(File dir,final String regex){
//返回表示此抽象路径名所表示目录中的文件和目录的抽象路径名数组,这些路径名满足特定过滤器。
return dir.listFiles(new FilenameFilter(){
private Pattern pattern=Pattern.compile(regex);
public boolean accept(File dir, String name) {
return pattern.matcher(name).matches();
}
});
}
public static File[] local(String path,final String regex){
return local(new File(path),regex);
}
//静态内部类
public static class TreeInfo implements Iterator<File>{
public List<File> files=new ArrayList<File>();
public List<File> dirs=new ArrayList<File>();
public Iterator<File> iterator(){
return files.iterator();
}
//按照指定 Collection 的迭代器所返回的元素顺序,将该 Collection 中的所有元素追加到此列表的尾部。
void addAll(TreeInfo other){
files.addAll(other.files);
dirs.addAll(other.dirs);
}
public String toString(){
return "dirs:"+PPrint.pformat(dirs)+"\n\nfiles:"+PPrint.pformat(files);
}
public static TreeInfo walk(String start,String regex){
return recurseDirs(new File(start),regex);
}
public 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(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 boolean hasNext() {

return false;
}
public File next() {
return null;
}
public void remove() {

}
}
public static void main(String[] args) {
if(args.length==0){
System.out.println(TreeInfo.walk(".","D.*\\.java"));
}else{
for(String arg:args){
System.out.println(TreeInfo.walk(arg));
}
}

}



}

你可能感兴趣的:(java,编程,.net)