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();
 
    }
 
 
 
  }  
 
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章