如果你想快速地從一個文件結構中找出指定類型的所有文件,可使用
JAVA.io.FileFilter實現(xiàn)。
FileFilter是JDK 1.2的許多附加部分之一。這個簡單的接口用于一個文件是否被接受。它一個非常一般的方法,去找出一個文檔系統(tǒng)。在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,F(xiàn)ileFilter是一個抽象類,經常和JFileChoosers一起使用。如果這樣做的話,你將必須去寫一個標準的適配器。
摘自:ZDnet 時間:2003年9月10日