使用 JFileChooser 允许 Swing 用户指定输出位置
Using JFileChooser to allow Swing user to specify output location
我必须编写一个 Java 8 Swing 应用程序,该应用程序的一部分会生成一个输出文件(Excel 电子表格)。所以在 UI 的某个时候,用户将不得不:
- Select 他们文件系统上的一个目录,Excel 文件将写入其中;然后
- 输入 Excel 文件的名称(如果他们在文件名中指定“.xls”或“.xlsx”,应用程序将 output/write 该文件在各自的 XLS/XLSX 输出;如果他们省略文件扩展名,则默认为 XLSX)
我感兴趣的是这里的体面的 UX 解决方案是什么,以及它如何映射到 Swing 控件及其布局。
我知道我可以使用 JFileChooser
选择目录或特定文件,但我从未用它来 select 目录 和 输入 new(文件系统中尚不存在)文件名 + 扩展名。
关于我可以在这里提供的实用、优雅且 simple/easy 易于使用和理解的解决方案有什么想法吗?
您可以使用 Apache 的 FileNameUtils,或者使用子字符串和 indexOf 实现您自己的字符串操作扩展提取...我会给您第一种情况的示例。
按照建议使用默认的 JFileChooser 后,您可以只检查指定的文件名,因为 JFileChooser 将 return 一个 File 对象(如果未选择任何内容,则为 null,因此首先检查空值):
JFileChooser fileChooser = new JFileChooser();
File selectedFile = fileChooser.getSelectedFile();
if (selectedFile != null) {
String givenExtension = FilenameUtils.getExtension(selectedFile.getName());
boolean noExtension = "".equals(givenExtension);
boolean xlsx = givenExtension.toLowerCase().contains("xlsx");
boolean xls = givenExtension.toLowerCase().contains("xls");
String newFileName = selectedFile.getName();
if (noExtension) {
newFileName += ".xlsx";
} else if (!xlsx && !xls) {
throw new Exception("Invalid name");
}
}
如果您不想接受不同的大小写,请删除 toLowerCase()。
这应该可以满足您的要求 ;)
我必须编写一个 Java 8 Swing 应用程序,该应用程序的一部分会生成一个输出文件(Excel 电子表格)。所以在 UI 的某个时候,用户将不得不:
- Select 他们文件系统上的一个目录,Excel 文件将写入其中;然后
- 输入 Excel 文件的名称(如果他们在文件名中指定“.xls”或“.xlsx”,应用程序将 output/write 该文件在各自的 XLS/XLSX 输出;如果他们省略文件扩展名,则默认为 XLSX)
我感兴趣的是这里的体面的 UX 解决方案是什么,以及它如何映射到 Swing 控件及其布局。
我知道我可以使用 JFileChooser
选择目录或特定文件,但我从未用它来 select 目录 和 输入 new(文件系统中尚不存在)文件名 + 扩展名。
关于我可以在这里提供的实用、优雅且 simple/easy 易于使用和理解的解决方案有什么想法吗?
您可以使用 Apache 的 FileNameUtils,或者使用子字符串和 indexOf 实现您自己的字符串操作扩展提取...我会给您第一种情况的示例。
按照建议使用默认的 JFileChooser 后,您可以只检查指定的文件名,因为 JFileChooser 将 return 一个 File 对象(如果未选择任何内容,则为 null,因此首先检查空值):
JFileChooser fileChooser = new JFileChooser();
File selectedFile = fileChooser.getSelectedFile();
if (selectedFile != null) {
String givenExtension = FilenameUtils.getExtension(selectedFile.getName());
boolean noExtension = "".equals(givenExtension);
boolean xlsx = givenExtension.toLowerCase().contains("xlsx");
boolean xls = givenExtension.toLowerCase().contains("xls");
String newFileName = selectedFile.getName();
if (noExtension) {
newFileName += ".xlsx";
} else if (!xlsx && !xls) {
throw new Exception("Invalid name");
}
}
如果您不想接受不同的大小写,请删除 toLowerCase()。
这应该可以满足您的要求 ;)