您的位置:首页 > 编程语言 > Java开发

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

2013-10-30 11:35 585 查看
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();

 

    }

 

 

 

  }  

 

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐