JavaFX 2.2获取选定的文件扩展名

时间:2013-12-17 15:18:40

标签: javafx filechooser

我不知道如何获取选定的文件exstesion。我看到开发人员经常提出这个问题,但我能找到并给出正确答案。我知道这是一个错误(fhttp://javafx-jira.kenai.com/browse/RT-18836),但无论如何都有任何解决方案。所以我想把我的折线图保存为pdf或png。我的两个文件的代码工作正常。但我无法忍受不被选中的文件。有没有可能的溶剂。我看到Java内置了这个问题的功能。

此解决方案与我无关: 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();

2 个答案:

答案 0 :(得分:7)

如果你想知道文件选择器中所选文件的扩展名,这里是代码..

String fileName = file1.getName();          
String fileExtension = fileName.substring(fileName.lastIndexOf(".") + 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.lastIndexOf(".") + 1, file.getName().length());
System.out.println(">> fileExtension" + fileExtension);

}

答案 1 :(得分: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!");
    }
}

请注意,由于我们可能使用的文件名与文件选择器不同,因此可能没有提示用户覆盖现有文件 - 因此您也必须手动处理该检查。