文件读写实用类
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);
?????? }
??????
??? }
???
}
?