FilenameFilter 文件过滤器的用法

FilenameFilter 是一个文件过滤器的接口,使用这个接口必须先实现  accept 这个方法

boolean accept(File dir, String name) 
          测试指定文件是否应该包含在某一文件列表中。

通过一个类来实现FilenameFilter 接口代码如下:

/**
 * @author L.Eric
 * 实现此接口的类实例可用于过滤器文件名。Abstract Window Toolkit 的文件对话框组件使用这些实例过滤 File 类的 list 方法中的目录清单。 
 */
class MyFileFilter implements FilenameFilter{
	private String ext;
	public MyFileFilter(String ext) {
		this.ext = ext;
	}
	
	//覆盖accept方法,
	/**
	 * 测试指定文件是否应该包含在某一文件列表中
	 * 当且仅当该名称应该包含在文件列表中时返回 true;否则返回 false。
	 * */
	@Override
	public boolean accept(File dir, String name) {
		return !name.endsWith(ext);
	}
	
}
MyFileFilter 类必须有一个显式的构造方法。 用于把文件的需要过滤的名字传入。 当然你要以其他形式过滤也可以,只要在accept这个方法进行修改就可以了!

那么如何使用MyFileFilter 这个类呢?很简单。

熟悉API的人就知道: 

File f = new File("目录或文件名");

f.listFiles();  这里有三个构造函数分别是

listFiles() 
          返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。

listFiles(FileFilter filter) 
          返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。

listFiles(FilenameFilter filter) 
          返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录

它们返回的值都是  File[] 


我们通过第三个构造函数就可以把MyFileFilter类 传入。 接下来我来个例子说明一下:


public class FileTest {
	//这个方法才用递归遍历
	/**
	 * @param pathname   目录或者文件路径
	 * @param space      父目录和子目录的空格,便于打印出来观察
	 * @param ext        代表要过滤的文件的扩张名
	 */   
	public static void readALLFilesForFilter(String pathname, String space, String ext){
		File f = new File(pathname);
		//通过过滤器来获得文件的目录和文件
		File[] fileList = f.listFiles(new MyFileFilter(ext)); //new 一个过滤器传入就ok了
		for(File f1 : fileList){
			if(f1.isFile()) {
				System.out.println(space + "-" + f1.getName());
			}
			//判断是否为目录
			if(f1.isDirectory()) {
				System.out.println(space + "-" + f1.getName());
				readALLFiles(f1.getPath().toString(), space +"  ");
			}
		}
	}
	
	public static void main(String[] args) {
		FileTest.readALLFilesForFilter("D://", " ", ".avi");
	}
	
	
	
	
}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值