FileFilter是JDK 1.2的许多附加部分之一。这个简单的接口用于一个文件是否被接受。它一个非常一般的方法,去找出一个文档系统。在FileFilter和其早期接口FilenameFilter间最大的不同就是:FileFilter使文件作为一个文件对象,而FilenameFilter使文件作为一个目录和一个字符串名被过滤。
例如:FileFilter接口包含如下方法:
boolean accept(File file);
而FilenameFilter包含如下方法:
boolean accept(File directory, String name);
一个简单的文件过滤是已知文件扩展名,你可以使用FilenameFilter 接口,但它却难以知道这个文件名到底是一个文件还是一个目录。为了去解决这个问题,你需要去做一个文件对象,与其自己去做,不如使用FileFilter接口,如下是ExtensionFileFilter代码:
package com.generationjava.io.find; import java.io.File; import java.io.FileFilter; public class ExtensionFileFilter implements FileFilter { private String extension; public ExtensionFileFilter(String extension) { this.extension = extension; } public boolean accept(File file) { if(file.isDirectory( )) { return false; } String name = file.getName( ); // find the last int idx = name.lastIndexOf("."); if(index == -1) { return false; } else if(index == name.length( ) -1) { return false; } else { return this.extension.equals(name.substring(index+1)); } } }
下面的例子使用了上面的代码:
... String dir = "..."; // directory of your choice File file = new File(dir); File[] files = file.listFiles(new ExtensionFileFilter("cfg")); // files variable is now c:*.cfg if 'dir' is c: // that is, all the files in the specified directory ending in *.cfg... FileFilter有一个父类在javax.swing.filechooser,FileFilter是一个抽象类,经常和JFileChoosers一起使用。如果这样做的话,你将必须去写一个标准的适配器。