2012-09-20 27 views
4

以下代碼在mac上返回文件時工作正常,因爲它會自動將 文件擴展名附加到文件的名稱。JavaFX FileChooser不返回Windows的文件擴展名

在Windows上,我必須輸入文件的擴展名作爲文件名的一部分,才能使用該擴展名返回....即使在'save type as'下拉菜單中選擇了擴展名菜單。

有沒有辦法在windows上從filechooser返回文件時自動附加擴展名?

FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter(fileExtension.toUpperCase()+" files(*."+fileExtension+")", "*."+fileExtension); 
       fileChooser.getExtensionFilters().add(extFilter); 

       //Show save file dialog 
       final File file = fileChooser.showSaveDialog(MyStage.this); 
+0

張貼上https://javafx-jira.kenai.com/browse/RT-30048 –

回答

2

我碰到了同樣的問題。我的解決方案是創建一個新的文件,並在文件構造函數中將文件擴展名附加爲字符串。

如果您希望用戶能夠選擇並覆蓋現有文件,請確保並添加一個檢查以確保在添加之前初始保存文件不包含特定的擴展名,否則您將得到類似「test .xls.xls」。

FileChooser fc = new FileChooser(); 
    FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("XLS File (*.xls)", "*.xls"); 

    fc.getExtensionFilters().add(extFilter); 

    File save = fc.showSaveDialog(stage); 

    save = new File(save.getAbsolutePath()+".xls"); 

    FileOutputStream fileOut = new FileOutputStream(save); 
+0

漏洞,如果用戶已經在文件名中鍵入「.xls的」會發生什麼?擴展名會翻倍嗎? – ceklock

+1

是的,它會延長一倍。爲避免它在if語句塊中使用add擴展,如: if(!save.getPath()。toLowerCase()。endsWith(「。xls」)save = new File(save.getPath()+)。 xls「); } –

+1

這不能正確工作 - 因爲在這種情況下,文件選擇器無法首先進行適當的覆蓋檢查 - 所以用戶可能會無意中覆蓋他們不想要的文件。驗證文件不存在(如果您重命名它),然後提示用戶....它的一個痛苦 - https://javafx-jira.kenai.com/browse/RT-31956 – user2163960