2016-02-24 75 views
0

我沒有問題打開多個文件類型,但我希望選項能夠保存多種文件類型。我無法弄清楚如何獲得用戶選擇將其文件類型保存爲的選項。JFileChooser,保存多種文件類型

這裏是我的代碼:

//.txt and .encm files are allowed 
    final JFileChooser txtOrEncmChooser = new JFileChooser(new File(System.getProperty("user.dir"))); 


    //only allow user to use .txt and .encm files 
    txtOrEncmChooser.addChoosableFileFilter(new FileNameExtensionFilter("Encrypted Data File (*.encm)", "encm")); 
    txtOrEncmChooser.addChoosableFileFilter(new FileNameExtensionFilter("Text File (*.txt)", "txt")); 
    txtOrEncmChooser.setAcceptAllFileFilterUsed(false); 

     //displays save file dialog 
     int returnVal = txtOrEncmChooser.showSaveDialog(FileEncryptionFilter.this); 

     //use chose to save file 
     if (returnVal == JFileChooser.APPROVE_OPTION) 
     { 
       //selects file 
       File fileName = txtOrEncmChooser.getSelectedFile(); 

     /****The problem is here, how do I figure out what file type the user selected?****/ 

        if .txt is selected{ 
        String filePath = fileName.getPath() + ".txt"; //file path 
        } 
        else if .encm is selected 
        { 
        String filePath = fileName.getPath() + ".encm"; //file path 
        } 
     } 

...我已經尋找解決方案的論壇,但我只找到了打開多個文件類型,不保存多種文件類型的解決方案。

回答

1

https://docs.oracle.com/javase/7/docs/api/javax/swing/JFileChooser.html#getFileFilter()

FileNameExtensionFilter f = (FileNameExtensionFilter) txtOrEncmChooser.getFileFilter(); 

由於getExtensions()返回一個數組,你必須通過所有的擴展進行迭代。如果你確定它只包含一個元素,當然,你不需要這樣做。例如,請檢查f.getExtensions()[0].equals("txt")。你也可以創建你的文件過濾器作爲局部變量,然後將它們與選定的進行比較。

+0

太棒了,它的工作!現在我的另一個問題是爲什麼getExtensions返回一個數組?我不明白在我的情況下我最終會有多個元素。 –

+0

@TommySaechao在你的情況下只有一個,但有時你可能想添加多個擴展。 'jpg'和'jpeg'就是一個典型的例子。這就是爲什麼這種方法是這樣寫的。另外,如果你能接受我的答案,那會很好。 :) – Veluria