有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用JFileChooser允许Swing用户指定输出位置

我必须编写一个Java8Swing应用程序,应用程序的一部分生成一个输出文件(Excel电子表格)。因此,在UI的某个时刻,用户必须:

  1. 在他们的文件系统上选择一个目录,Excel文件将写入该目录;然后
  2. 输入Excel文件的名称(如果他们在文件名中指定“.xls”或“.xlsx”,则应用程序将在相应的xls/xlsx输出中输出/写入该文件;如果他们忽略文件扩展名,则默认为xlsx)

我感兴趣的是什么是一个体面的用户体验解决方案,以及它如何映射到Swing控件及其布局

我知道我可以使用JFileChooser来选择目录或特定文件,但我从未使用它来选择目录,并输入(文件系统上还不存在)文件名+扩展名的名称

关于我能提供的功能性、优雅性和简单易用的解决方案,有什么想法吗;明白吗


共 (1) 个答案

  1. # 1 楼答案

    您可以使用Apache的FileNameUtils,也可以通过使用子字符串和indexOf进行字符串操作来实现自己的扩展提取。。。我给你举一个第一个例子

    按照建议使用默认JFileChooser后,您只需检查指定的文件名,因为JFileChooser将返回一个文件对象(如果未选择任何内容,则返回null,因此首先检查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()

    这应该满足您的需要;)