I/O 获取指定目录下的指定文件和目录

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 { 
	
	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( 
	            new File(name).getName()).matches(); 
	        } 
	      }); 
	    }
	
	 public static File[] local(String path, final String regex) { // Overloaded 
			    return local(new File(path), regex); 
	} 
	 
			  // A two-tuple for returning a pair of objects: 
			  public static class TreeInfo implements Iterable<File> { 
			    public List<File> files = new ArrayList<File>(); 
			    public List<File> dirs = new ArrayList<File>(); 
			    // The default iterable element is the file list: 
			    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) + 
			        "\n\nfiles: " + PPrint.pformat(files); 
			    } 
			  } 
			  public static TreeInfo walk(String start, String regex) { // Begin recursion 
			    return recurseDirs(new File(start), regex); 
			  } 
			  public static TreeInfo walk(File start, String regex) { // Overloaded 
			    return recurseDirs(start, regex); 
			  } 
			  public static TreeInfo walk(File start) { // Everything 
			    return recurseDirs(start, ".*"); 
			  } 
			  public static TreeInfo walk(String start) { 
			    return recurseDirs(new File(start), ".*"); 
			  } 
			  
			  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 // Regular file 
			        if(item.getName().matches(regex)) 
			          result.files.add(item);
			    }
			    return result; 
			  } 
			  
			  // Simple validation test: 
			  public static void main(String[] args) { 
			    if(args.length == 0) 
			      System.out.println(walk(".")); 
			    else 
			      for(String arg : args) 
			       System.out.println(walk(arg));
			  }
			  
			  static class PPrint{
				  static String pformat(List<File> list){
					  String s = "";
					  for(int i=0;i<list.size();i++){
						  s += list.get(i).getName()+"\r\n";
					  }
					  return s;
				  }
			  }
}
			  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值