你总是希望能够限制由list( )方法返回的文件数目,使它仅返回那些与一定的文件名方式或者过滤(filter)相匹配的文件。为达到这样的目的,必须使用list( )的第二种形式:
String[ ] list(FilenameFilter FFObj)
该形式中,FFObj是一个实现FilenameFilter接口的类的对象。 FilenameFilter仅定义了一个方法,accept( )。该方法被列表中的每个文件调用一次。它的通常形式如下:
boolean accept(File directory, String filename)
当被directory 指定的目录中的文件(也就是说,那些与filename 参数匹配的文件)包含在列表中时,accept( )方法返回true ,当这些文件没有包括在列表中时,accept( )返回false。
下面显示的OnlyExt 类实现FilenameFilter接口,它被用来修饰前面的程序,限制由 list( )返回的文件名的可见度,把对象被创建时以指定扩展名结束的文件归档。
import java.io.*;
public class OnlyExt implements FilenameFilter {
String ext;
public OnlyExt(String ext) {
this.ext = "." + ext;
}
public boolean accept(File dir, String name) {
return name.endsWith(ext);
}
}
修改过的目录列表程序显示如下。现在它只显示以.html 为扩展名的文件。
// Directory of .HTML files.
import java.io.*;
class DirListOnly {
public static void main(String args[]) {
String dirname = "/java";
File f1 = new File(dirname);
FilenameFilter only = new OnlyExt("html");
String s[] = f1.list(only);
for (int i=0; i < s.length; i++) {
System.out.println(s[i]);
}
}
}