java 保存文件对话框的使用以及文件过滤器(FileDialog、JFileChooser)


 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();

    }

 

  }  

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值