JavaFX文件选择器在Windows下未返回文件扩展名

4
下面的代码在Mac上返回文件时可以正常工作,因为它会自动将文件扩展名附加到文件名中。
但是在Windows上,我必须在文件名中键入文件扩展名,以便它返回具有该扩展名的文件......尽管扩展名已在“另存为类型”下拉菜单中选择。
是否有一种方法在从文件选择器返回文件时自动将扩展名附加到名称中?
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);

已在 https://javafx-jira.kenai.com/browse/RT-30048 上报为错误。 - stefan.at.kotlin
1个回答

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

如果用户在文件名中已经输入了“.xls”,会发生什么?扩展名会重复吗? - ceklock
1
是的,它会双重扩展。为了避免这种情况,在 if 语句块中使用添加扩展名的方法,例如:if(!save.getPath().toLowerCase().endsWith(".xls")){ save = new File(save.getPath() + ".xls"); } - A J Qarshi
1
这也不会完全正确地工作 - 因为在这种情况下,文件选择器未能首先进行适当的覆盖检查 - 因此用户可能会无意中覆盖他们不想要的文件。您还需要验证文件是否存在(如果已重命名),然后提示用户...... 这很麻烦 - https://javafx-jira.kenai.com/browse/RT-31956 - user2163960

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接