2011-06-30 64 views
0

名單在回答這個問題:I want to make a java program in which there is a combobox which displays the titles of all the files available in a folder返回音頻文件類型

實施答案被帶到了我的注意的另一種方法;使用AudioSystem.getAudioFileTypes()返回指定文件夾中的所有支持的音頻文件。我是一個相當經驗的編碼器,在我給出的答案是無法融入這個方法

File someFolder = new File("pathname"); 

Object[] wavFiles = someFolder.listFiles(wavExtensionFilenameFilter); 
JComboBox songComboBox = new JComboBox(wavFiles); 

誰能告訴我如何做到這一點呢?

回答

4

以下來源將顯示特定於Java Sound可理解的文件類型的JFileChooser。一旦用戶選擇任何聲音剪輯,應用程序。將獲得該目錄中所有剪輯的列表並將其顯示在組合中。

Sound clip list

在選擇從組合的剪輯,我們可以play the sound in a javax.sound.sample.Clip(使用Java API的聲音或其他方式),而是我們選擇。對於使用Desktop來打開文件(在系統默認播放器中)的1.6+'單行'。

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.filechooser.FileNameExtensionFilter; 
import javax.sound.sampled.*; 
import java.io.*; 

class GetSoundsByFileType { 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       AudioFileFormat.Type[] formatTypes = AudioSystem.getAudioFileTypes(); 
       String[] types = new String[formatTypes.length]; 
       for(int ii=0; ii<types.length; ii++) { 
        types[ii] = formatTypes[ii].getExtension(); 
       } 

       FileTypesFilter fileTypesFilter = new FileTypesFilter(types); 
       // Just to confuse things, JFileChooser accepts a 
       // different type of filter! 
       FileNameExtensionFilter extensionFilter = 
        new FileNameExtensionFilter("Sound clips", types); 
       JFileChooser fc = new JFileChooser(); 
       fc.setAcceptAllFileFilterUsed(false); 
       fc.addChoosableFileFilter(extensionFilter); 

       int result = fc.showOpenDialog(null); 
       if (result==JFileChooser.APPROVE_OPTION) { 
        File startAt = fc.getSelectedFile(); 

        startAt = startAt.getParentFile(); 
        File[] files = startAt.listFiles(fileTypesFilter); 

        final JComboBox clipCombo = new JComboBox(files); 
        clipCombo.addActionListener(new ActionListener(){ 
          // 1.6+ 
          Desktop desktop = Desktop.getDesktop(); 

          public void actionPerformed(ActionEvent ae) { 
           try { 
            desktop.open((File)clipCombo.getSelectedItem()); 
           } catch(Exception e) { 
            e.printStackTrace(); 
           } 
          } 
         }); 

        JOptionPane.showMessageDialog(null, clipCombo); 
       } 
      } 
     }); 
    } 
} 

class FileTypesFilter implements FilenameFilter { 

    private String[] types; 

    FileTypesFilter(String[] types) { 
     this.types = types; 
    } 

    public boolean accept(File dir, String name) { 
     for (String type:types) { 
      if (name.toLowerCase().endsWith(type.toLowerCase())) { 
       return true; 
      } 
     } 
     return false; 
    } 
} 
+0

我想補充一點,我看到我的錯誤是我認爲我可以保留我的答案只是幾行,仍然實現AudioSystem.getAudioFileTypes()。感謝您的詳細回覆,它已經澄清了很多事情:) –

+0

對於'少數幾條'的答案,我認爲你的最終答案是好的。 OTOH這僅僅是73行,對於一個完整的文件選擇器的獨立示例! ;) –