3

我不知道如何获得选定的文件扩展名。我看到开发人员经常问这个问题,但我可以找到正确的答案。我知道这是一个错误(http://javafx-jira.kenai.com/browse/RT-18836),但无论如何,有没有解决方案。我想将我的折线图保存为 .PDF 或 .PNG 文件。我的两个文件的代码都可以正常工作。但我就是不能忍受不选择文件。有没有可能的解决方案?我看到 Java 已经为这个问题内置了函数。

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

2 回答 2

8

如果您想从文件选择器中知道所选文件的扩展名,这里有一个代码..

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);

}
于 2013-12-18T03:57:17.843 回答
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!");
    }
}

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

于 2014-03-13T21:15:10.480 回答