2011-03-24 130 views
0

JFileChooser窗口中不顯示擴展名文件。這裏是我的過濾器類:JFileChooser上不顯示擴展名文件

import java.io.File; 

public class AudioFilter extends javax.swing.filechooser.FileFilter{ 
    public boolean accept(File f){ 
     if (f.isDirectory()){ 
      return true; 
     } 
     String extension = Utils.getExtension(f); 
     if (extension != null){ 
      if (extension.equals(Utils.wav) 
      || extension.equals(Utils.aif) 
      || extension.equals(Utils.rmf) 
      || extension.equals(Utils.au) 
      || extension.equals(Utils.mid)){ 
       return true; 
      }else{ 
       return false; 
      } 
     } 
     return false; 
    } 

    public String getDescription(){ 
     return "wav, aif, rmf, au, mid"; 
    } 
} 

class Utils{ 
    public final static String wav = "wav"; 
    public final static String aif = "aif"; 
    public final static String rmf = "rmf"; 
    public final static String au = "au"; 
    public final static String mid = "mid"; 
/* 
* Get the extension of a file. 
*/ 
    public static String getExtension(File f){ 
     String ext = null; 
     String s = f.getName(); 
     int i = s.lastIndexOf('.'); 
     if (i > 0 && i < s.length() - 1){ 
      ext = s.substring(i+1).toLowerCase(); 
     } 
     return ext; 
    } 
} 

這裏是我的代碼來調用過濾過程:

AudioFilter audiofiler = new AudioFilter(); 
    boolean openFile() throws FileNotFoundException{ 
      JFileChooser jfc = new JFileChooser(); 
      jfc.setDialogTitle("Open File"); 
      jfc.setFileSelectionMode(JFileChooser.FILES_ONLY); 
      jfc.setCurrentDirectory(new File (".")); 
      jfc.setFileFilter(audiofilter); 
      int result = jfc.showOpenDialog(this); 
      if(result == JFileChooser.CANCEL_OPTION){ 
       return true; 
      }else if(result == JFileChooser.APPROVE_OPTION){ 
       fFile = jfc.getSelectedFile(); 
       String file_string = readFile (fFile); 
       if(fFile.isDirectory()){ 
        String[] filesInDirectory = fFile.list(); 
        for(int i=0;i<filesInDirectory.length;i++){ 
         jList1.setModel(list); 
         list.addElement(filesInDirectory[i]); 
        } 
       } 

       if(file_string != null){ 
        fTextArea.setText(file_string); 
       }else{ 
        return false; 
       } 
      } 
      return true; 
     } 
+0

最好使用[AudioSystem.getAudioFileTypes()](http://download.oracle.com/javase/6/docs/api/javax/sound/sampled/AudioSystem.html#getAudioFileTypes%28 %29)來確定當前JRE支持哪些音頻類型。例如,我的JRE(沒有通過SPI添加任何其他聲音類型)報告它理解'WAVE','AU'和'AIFF'。我不確定RMF。 WikiPedia聲稱Java Sound支持它,可能它沒有列在採樣聲音格式中,因爲它可以包含MIDI數據。但無論如何,如果Java Sound突然支持「SND」或「MP3」,我們希望將它們包含在列表中。 – 2011-03-24 06:52:36

回答

1

我也測試過,它工作正常。如果您仍有問題,請發佈完整的代碼。

enter image description here

0

我測試你的代碼和修改的幾個文件過濾的一個簡單的測試(打印出所選擇文件爲std出)如下,它工作得很好了AudioFilter對象...

AudioFilter.java:

package file.test; 

import java.io.File; 

import javax.swing.filechooser.FileFilter; 

public class AudioFilter extends FileFilter { 

    @Override 
    public boolean accept(File f) { 
     if (f.isDirectory()){ 
      return true; 
     } 
     String extension = Utils.getExtension(f); 
     if (extension != null){ 
      if (
        (extension.equals(Utils.wav)) 
       || (extension.equals(Utils.aif)) 
       || (extension.equals(Utils.rmf)) 
       || (extension.equals(Utils.au)) 
       || (extension.equals(Utils.mid)) 
      ) { 
       return true; 
      } 
      else { 
       return false; 
      } 
     } 
     return false; 
    } 

    @Override 
    public String getDescription() { 
     return "wav, aif, rmf, au, mid"; 
    } 

    static class Utils{ 
     public final static String wav = "wav"; 
     public final static String aif = "aif"; 
     public final static String rmf = "rmf"; 
     public final static String au = "au"; 
     public final static String mid = "mid"; 

     public static String getExtension(File f){ 

      String ext = null; 
      String s = f.getName(); 
      int i = s.lastIndexOf('.'); 
      if (i > 0 && i < s.length() - 1){ 
       ext = s.substring(i+1).toLowerCase(); 
      } 
      return ext; 

     } 
    } 

} 

AudioFilterTest.java:

package file.test; 

import java.io.File; 
import java.io.FileNotFoundException; 

import javax.swing.JFileChooser; 

public class AudioFilterTest { 

    static AudioFilter audioFilter = new AudioFilter(); 

    public static boolean openFile() throws FileNotFoundException { 
     JFileChooser jfc = new JFileChooser(); 

     jfc.setDialogTitle("Open File"); 
     jfc.setFileSelectionMode(JFileChooser.FILES_ONLY); 
     jfc.setCurrentDirectory(new File(".")); 
     jfc.setFileFilter(audioFilter); 
     int result = jfc.showOpenDialog(null); 

     if (result == JFileChooser.CANCEL_OPTION){ 
      return true; 
     } 
     else if (result == JFileChooser.APPROVE_OPTION){ 
      File fFile = jfc.getSelectedFile(); 
      String filestr = fFile.getAbsolutePath(); 

      System.out.println(filestr); 
     } 

     return false; 
    } 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     try { 
      openFile(); 
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

} 

我想你需要檢查你的openFile()方法的版本... ESP。你的readFile(File)方法

+0

哇,先生你的一個真正的。這解決了我的問題:String filestr = fFile.getAbsolutePath();許多很多謝謝先生... :) :) :) – 2011-03-24 06:47:01