2013-12-17 34 views
2

我不知道如何獲得選定的文件exstesion。我已經看到開發人員經常問這個問題,但我可以找到適當的答案。我知道這是一個錯誤(fhttp://javafx-jira.kenai.com/browse/RT-18836),但無論如何有任何解決方案。所以我想把我的線圖保存爲pdf或png。我的兩個文件的代碼工作正常。但我不能忍受沒有得到選定的文件。有沒有可能的溶劑。我看到Java爲此問題建立了功能。JavaFX 2.2獲取選定的文件擴展名

該解決方案是不相關的我: JavaFX FileChooser not returning file extension for Windows

我的代碼是:

FileChooser fileChooser = new FileChooser(); 
FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("PDF file(*.pdf)" ,"  
*.pdf"); 

fileChooser.getExtensionFilters().add(extFilter); 
extFilter = new FileChooser.ExtensionFilter("PNG files (*.png)", "*.png"); 
fileChooser.getExtensionFilters().add(extFilter); 
fileChooser.setTitle("Save as"); 
File file = fileChooser.showSaveDialog(primaryStage); 

然後我得到沒有擴展名的文件路徑:

String filePath = file.getAbsolutePath(); 

回答

7

如果你想知道從文件選擇器中選擇文件的擴展名是代碼..

String fileName = file1.getName();   
String fileExtension = fileName.substring(fileName.indexOf(".") + 1, file1.getName().length()); 
System.out.println(">> fileExtension" + fileExtension); 

而這就是你需要文件選擇做一個簡短的,

FileChooser fileChooser = new FileChooser(); 
// Set extension filter 
FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("Image Files", "*.jpg", "*.jpeg"); 
fileChooser.getExtensionFilters().add(extFilter); 

File file = fileChooser.showOpenDialog(root.getScene().getWindow()); 

if (file != null) { 

String fileName = file.getName();   
String fileExtension = fileName.substring(fileName.indexOf(".") + 1, file.getName().length()); 
System.out.println(">> fileExtension" + fileExtension); 

} 
+0

Thanky you man!但我這樣做是爲了show save dialog而不是showOpenDialog。 – wanttobeprofessional

1

這是JavaFX的一個非常惱人的事情,如果你問我 - 因爲它們會自動附加在Windows上的擴展,但不在Linux或Mac上。

所以,如果你想確保你將創建該文件將具有擴展名,你需要做的是這樣的:

FileChooser fc = new FileChooser(); 
fc.setInitialFileName("Exported.txt"); 
fc.getExtensionFilters().add(new FileChooser.ExtensionFilter("Text Files (*.txt)", "*.txt")); 
fc.getExtensionFilters().add(new FileChooser.ExtensionFilter("XML Files (*.xml)", "*.xml")); 
fc.getExtensionFilters().add(new FileChooser.ExtensionFilter("All Files (*.*)", "*")); 
File file = fc.showSaveDialog(rootPane.getScene().getWindow()); 
if (file != null) 
{ 
    File f; 
    String tempPath = file.getCanonicalPath().toLowerCase(); 
    if (!(tempPath.endsWith(".txt") || tempPath.endsWith(".xml"))) 
    { 
     String extension = fc.selectedExtensionFilterProperty().get().getExtensions().get(0).substring(1); 
     // default to .txt, if the user had *.* selected 
     if (extension.length() == 0) 
     { 
      extension = ".txt"; 
     } 
     f = new File(file.getCanonicalPath() + extension); 
    } 
    else 
    { 
     f = file.getCanonicalFile(); 
    } 

    System.out.println(f); 
    if (f.exists()) 
    { 
     System.err.println("You will overwrite!"); 
    } 
} 

注意,因爲我們可能使用不同的文件名比文件選擇器出來後,用戶可能沒有被提示覆蓋現有的文件 - 所以你將不得不手動處理該檢查。