学习笔记(file 与 filenameFilter)

package com.trs.bwl;

import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;
import java.util.regex.Pattern;

public class DirList {

	public static void main(String[] args) {
		File path = new File("d:/");
		String[] list;
		list = path.list(new DirFilter(".*\\.txt"));
		Arrays.sort(list);
		for(int i = 0; i < list.length; i++) {
			System.out.println(i + ": " + list[i]);
		}
	}
	
}

class DirFilter implements FilenameFilter {
	
	private Pattern pattern;
	
	public DirFilter(String reg) {
		pattern = Pattern.compile(reg);
	}
	
	public boolean accept(File dir, String name) {
		return pattern.matcher(new File(name).getName()

).matches();
	}
	
}

 

public   interface   FilenameFilter   {
boolean   accept(文件目录,   字串名);
}

它指出这种类型的所有对象都提供了一个名为accept()的方法。之所以要创建这样的一个类,背后的全部原因就是把accept()方法提供给 list()方法,使list()能够“回调”accept(),从而判断应将哪些文件名包括到列表中。因此,通常将这种技术称为“回调”,有时也称为 “算子”(也就是说,DirFilter是一个算子,因为它唯一的作用就是容纳一个方法)。由于list()采用一个FilenameFilter对象作 为自己的自变量使用,所以我们能传递实现了FilenameFilter的任何类的一个对象,用它决定(甚至在运行期)list()方法的行为方式。回调 的目的是在代码的行为上提供更大的灵活性

 

源代码:

public   String[]   list(FilenameFilter   filter)   {
String   names[]   =   list();
if   ((names   ==   null)   ||   (filter   ==   null))   {
        return   names;
}
ArrayList   v   =   new   ArrayList();
for   (int   i   =   0   ;   i   <   names.length   ;   i++)   {
        if   (filter.accept(this,   names[i]))   {
v.add(names[i]);
        }
}
return   (String[])(v.toArray(new   String[0]));
        } 

 

下面是使用FilenameFilter实现图片过滤,只要.gif,.jpg,.png文件

 public class ImageFilter  implements FilenameFilter{   
   
   public boolean isGif(String file) {   
     if (file.toLowerCase().endsWith(".gif")){   
       return true;   
     }else{   
       return false;   
     }   
   }   
   public boolean isJpg(String file){   
     if (file.toLowerCase().endsWith(".jpg")){   
       return true;   
     }else{   
       return false;   
     }   
   }   
   
   public boolean isPng(String file){   
     if (file.toLowerCase().endsWith(".png")){   
       return true;   
     }else{   
       return false;   
     }   
   }   
   public boolean accept(File dir,String fname){   
     return (isGif(fname) || isJpg(fname) || isPng(fname));   
   
   }   
   
 }    
 

程序测试类:

 

  public class ImageFilterTest{   
     public static void main(String[] args){   
         File directory=new File("E:\\program\\FilenameFilter\\images");   
         String[] images = directory.list(new ImageFilter());   
         System.out.println("size="+images.length);   
         for (int i = 0; i < images.length; i++){   
              String imgfile=images[i];   
              System.out.println("imgfile="+imgfile);   
         }   
     }   
 }   

你可能感兴趣的:(FilenameFilter)