java io学习--提取一个目录下得特定文件的名字

public class Test{
	//暂时没调用
	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) {
				return pattern.matcher(new File(name).getName()).matches();
			}
		});
	}
	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() {
			// TODO Auto-generated method stub
			return files.iterator();
		}
		void addAll(TreeInfo other){
			files.addAll(other.files);
			dirs.addAll(other.dirs);
		}
		public void show(){
			System.out.println("目录:");
			for(File item : dirs){
				System.out.println(item.getName());
			}
			System.out.println("文件:");
			for(File item : files){
				System.out.println(item.getName());
			}
			
		}
	}
	//匹配的开始目录,需要匹配的正则表达式
	public static TreeInfo walk(String start){
		return recurseDirs(new File(start),".*\\.rmvb");
	}
	private static TreeInfo recurseDirs(File file, String regex) {
		TreeInfo result=new TreeInfo();
		for(File item : file.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 void main(String[] args) {
		TreeInfo info=walk("D:\\娱乐");
		info.show();
	}
}
 这里的FilenameFilter采用的是一种策略模式(Strategy)
1、 定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,Context使用这个接口调用不同的算法,一般使用接口或抽象类实现。 

  ConcreteStrategy(具体策略类): 

2、 实现了Strategy定义的接口,提供具体的算法实现。
另外的一种找到自定义文件的方法
 File files[]=local(new File("D:\\娱乐\\电影"),".*\\.rmvb");
  List<File> lists=Arrays.asList(files);
  for(Iterator it=lists.iterator();it.hasNext();){
   System.out.println(it.next());
  }
//  for(File item :files){
//   System.out.println(item.getName());
//  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值