开课吧Java课堂之如何使用FilenameFilter

98 阅读1分钟

你总是希望能够限制由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]); 
 } 
 } 
}