1.FileDialog使用方法:

 
 FileDialog fd=new FileDialog(new Frame(),"测试",FileDialog.LOAD);
 FilenameFilter ff=new FilenameFilter(){
   public boolean accept(File dir, String name) {
    if (name.endsWith("jpg")){
     return true;
    }
    return false;
   }
  };
  fd.setFilenameFilter(ff);
 fd.setVisible(true);
 System.out.println(fd.getDirectory()+fd.getFile());
 
但在Windows中FileDialog + FilenameFilter无法正常工作, jdoc的原注释为:Filename filters do not function in Sun's reference implementation for Microsoft Windows.
 
2.FileDialog + FilenameFilter可以用JFileChooser + javax.swing.filechooser.FileFilter 来代替,jdoc中的例子如下:
 
    JFileChooser chooser = new JFileChooser();
    // Note: source for ExampleFileFilter can be found in FileChooserDemo,
    // under the demo/jfc directory in the Java 2 SDK, Standard Edition.
    ExampleFileFilter filter = new ExampleFileFilter();
    filter.addExtension("jpg");
    filter.addExtension("gif");
    filter.setDescription("JPG & GIF Images");
    chooser.setFileFilter(filter);
    int returnVal = chooser.showOpenDialog(parent);
    if(returnVal == JFileChooser.APPROVE_OPTION) {
       System.out.println("You chose to open this file: " +
            chooser.getSelectedFile().getName());
    }
 
转应用实例:
    JFileChooser filechooser = new JFileChooser();//创建文件选择器
    filechooser.setCurrentDirectory(new File("."));//设置当前目录
    filechooser.setAcceptAllFileFilterUsed(false);
    //显示所有文件
    filechooser.addChoosableFileFilter(new javax.swing.filechooser.FileFilter() {
      public boolean accept(File f) {
        return true;
      }
      public String getDescription() {
        return "所有文件(*.*)";
      }
    });
    //显示JAVA源文件
    filechooser.setFileFilter(new javax.swing.filechooser.FileFilter() {
      public boolean accept(File f) { //设定可用的文件的后缀名
        if(f.getName().endsWith(".java")||f.isDirectory()){
          return true;
        }
        return false;
      }
      public String getDescription() {
        return "JAVA源程序(*.java)";
      }
    });
 
java--FilenameFilter文件过滤器 
 
java中有一个FilenameFilter的接口,能够过滤得到指定类型的文件或者目录,其中必须重写accept(File file,String path)方法
 
public class DirFilter implements FilenameFilter{
 
  private String type;
 
  public DirFilter(String tp){
 
    this.type=tp;
 
  }
 
 
 
  public boolean accept(File fl,String path) throws Exception{
 
     File file=new File(path);
 
     String filename=file.getName();
 
     return filename.indexOf(type)!=-1;
 
  }
 
}
 
 
 
具体应用方法:File假如是一个Directory,可以通过list()方法得到这个目录下所有的文件和目录的名称数组,list()方法,一种是没有参数,一种是实现FilenameFilter接口的参数,例如要获得一个指定目录下的所有的java文件,就要使用第二种带参数的list()方法
 
 
 
public class Test{
 
  public static void main(String[] args){
 
    try{
 
      //指定目录(“.”表示当前目录)
 
      File dir=new File(".");
 
      String[] names;
 
      //获得所有java文件
 
      DirFilter filter=new DirFilter(".java");
 
      names=dir.list(filter);
 
      //打印所有java文件名称
 
      for(int i=0;i<names.length;i++){
 
        System.out.println("i:"+i+" name:"+names[i]);
 
      }
 
    }catch(Exception e){
 
      e.printStackTrace();
 
    }
 
  }
 
}
 
 
 
其中这里还可以将DirFilter类作为Test的一个匿名内部类来实现,例如:
 
public class Test{
 
  //type:必须声明为final类型,作为一个匿名内部类,访问的变量都必须声明为final类型
 
  public static FilenameFilter filter(final String type) throws Exception{
 
    return new FilenameFilter(){
 
      public boolean accept(File file,Stirng path){
 
        String filename=new File(path).getName();
 
        return filename.indexOf(type)!=-1;
 
        } 
 
      };   
 
  }
 
 
 
  public static void main(String[] args){
 
    try{    
 
      File file=new File(".");
 
      String names[];
 
      names=file.list(filter(".java");
 
      for(int i=0;i<names.length;i++){
 
        System.out.println("i:"+i+" filename:"+names[i]);
 
      }
 
    catch(Exception e){
 
      e.printStackTrace();
 
    }
 
 
 
  }  
 
}