使用FileFilter查找文件系统

ZDNet软件频道 时间:2003-03-12 作者:翻译:Java研究组织-live |  我要评论()
本文关键词:javatips
如果你想快速地从一个文件结构中找出指定类型的所有文件,可使用 java.io.FileFilter实现。
本文译自Builder.com如果你想快速地从一个文件结构中找出指定类型的所有文件,可使用 java.io.FileFilter实现。



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一起使用。如果这样做的话,你将必须去写一个标准的适配器。



责任编辑:炒饭

欢迎评论或投稿


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134