1、目录列表器

/**
* @see DirFilter.java
* @author Al_assad [email protected]
* @date 2016年9月30日 上午9:07:58
* @version V1.0
* Description: 文件目录列表器
*                         1、列举处理一个目录下的所有文件和目录;
*                         2、拥有过滤功能;
*                         3、对列举对象字母字自动排序;
*/

import java.util.*;
import java.io.*;

public class DirList {
       private String pathname; /**记录路径名*/
       private String[] list;                       /**记录文件列表*/
       private String regex;           /**记录文件名过滤用的正则表达式*/
       public DirList() throws FileNotFoundException{
             this(".");
       }
       public DirList(String pathanme)throws FileNotFoundException{
             this(".",".*");
       }
       public DirList(String pathname,String regex) throws FileNotFoundException{
             this.pathname = pathname;
             File path = new File(pathname);
             if(!path.exists())
                    throw new FileNotFoundException();

             if(regex.equals(".*"))
                    list = path.list();       //直接列举文件目录
             else
                    list = path.list(new DirFilter(regex));       //使用指定的FilenameFilter筛选列举目录;
            
               /*该部分可以使用匿名内部类重写
              * list = path.list(new FilenameFilter(){
              *           private Pattern pattern = Pattern.compile(regex);
              *           public boolean accept(File dir,String name){
              *                  return pattern.matcher(name).matches();
              *           }
              * )*/

             //对list按字母顺序进行排序;
             Arrays.sort(list,String.CASE_INSENSITIVE_ORDER);
       }
       /**在控制台上打印list*/
       public void print(){
             for(String dirItem : list)
                    System.out.println(dirItem);
       }
       /**返回list结果*/
       public String[] getList(){
             return this.list;
       }

}

/**
* @see FilenameFilter
* @author Al_assad [email protected]
* @date 2016年9月30日 上午9:45:34
* @version V1.0
* Description: 文件目录筛选器
*      接口FilenameFilter的内容:
*      public interface FilenameFilter{
*            boolean accpet(File dir,String name);  //原始目录文件dir,和待筛选的文件名name;
*      }
*
*/
import java.io.*;
import java.util.regex.*;

public class DirFilter implements FilenameFilter{
       private Pattern pattern;
       public DirFilter(String regex){
             pattern = Pattern.compile(regex);
       }
       public boolean accept(File dir,String name){
             return pattern.matcher(name).matches();
       }
       /* Pattern p = Pattern.compile(regexString);
        * Matcher m = p.matcher(targetString);
        * boolean result = m.matches();
        * */
}

2、目录使用工具

/**
* @see
* @author Al_assad [email protected]
* @date 2016年9月30日 上午10:15:55
* @version V1.0
* Description: 目录实用工具
*                         1、local产生本地目录中的文件集;
*                         2、walk产生给定目录下的整个目录树的所有文件集;
*                         3、提供文件名筛选功能;
*/

import java.io.*;
import java.util.regex.*;
import java.util.*;

public 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);
       }

       /**walk产生给定目录下的整个目录树的所有文件集,结果以TreeInfo的形式返回(使用递归的方式进行访问)*/
       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),".*");
       }

       private static TreeInfo recurseDirs(File start,String regex){
             TreeInfo result = new TreeInfo();
             for(File item : start.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;
       }

       //定义内部类TreeInfo文件树信息类
       public static class TreeInfo implements Iterable<File>{
             public List<File> files = new ArrayList<File>();
             public List<File> dirs = new ArrayList<File>();
             public Iterator<File> iterator(){
                    return files.iterator();
             }
             void addAll(TreeInfo tree){
                    this.files.addAll(tree.files);
                    this.dirs.addAll(tree.dirs);
             }
             public String toString(){
                    return "files:"+getListStr(files)+"\ndirs:"+getListStr(dirs);
             }
             private String getListStr(List<File> list){
                    String str ="[\n";
                    for(File element : list)
                          str += (element.getName() +"\n");
                    str += "]";
                    return str;
             }
       }

}