当前位置: 首页 > 知识库问答 >
问题:

选择特定目录的Java FileFilter

帅颖逸
2023-03-14
class SMARTWorkspaceFilter extends javax.swing.filechooser.FileFilter {

    String description = "SMART Workspace";
    String fileNameFilter = "smart.workspace";

    SMARTWorkspaceFilter() {

    }

    @Override
    public boolean accept(File file) {

        log.debug("Testing file: " + file.getName());

        if (file.isFile()) {
            return false;
        }

        if (file.isDirectory()) {
            File[] files = file.listFiles();
            for (File f : files) {

                log.debug("Directory: " + f.isDirectory());
                log.debug("Name: " + f.getName());

                if (f.isDirectory()) {
                    return true;
                }

                if (f.getName().equals(fileNameFilter)) {
                    return true;
                }
            }
        }
        return false;
    }

    @Override
    public String getDescription() {
        return description;
    }
}

例如,'workspace'目录存在于C://folder1/folder2/wokspace中,我希望允许FileChooser在C://处“启动”,并允许用户导航到'workspace'文件夹并接受它。FileChooser不应该允许接受Folder1或Folder2,但仍然允许通过Folder1和Folder2导航。

共有1个答案

赵涵亮
2023-03-14

最终@Sebastianh是正确的,这似乎不可能通过Filefilter。相反,我扩展了JFileChooser。

javax.swing.JFileChooser fileChooser = new javax.swing.JFileChooser(defaultLocation){
    @Override
    public boolean isDirectorySelectionEnabled() {
        setOpenButtonState(this, false);

        File file = getSelectedFile();

        if(file == null){
            return false;
        }

        if(file.isDirectory()){
            File[] files = file.listFiles();
            for(File f : files){
                if(f.isFile() && f.getName().equals("smart.workspace")){
                    setOpenButtonState(this, true);
                    return true;
                }
            }
        }

        return false;
    }

    private void setOpenButtonState(java.awt.Container c, boolean flag) {
        int len = c.getComponentCount();
        for (int i = 0; i < len; i++) {
            java.awt.Component comp = c.getComponent(i);

            if (comp instanceof javax.swing.JButton) {
                javax.swing.JButton b = (javax.swing.JButton)comp;

                if ( b != null && b.getText() != null && b.getText().equals("Open") ) {
                    b.setEnabled(flag);
                }

            } else if (comp instanceof java.awt.Container) {
                setOpenButtonState((java.awt.Container) comp, flag);
            }
        }     
    }

};

除了防止选择,我添加了禁用打开按钮,以避免混乱。

归功于禁用打开按钮-->JFileChooser中的禁用打开按钮?

 类似资料:
  • 我有这个: 我想选择类为col-md-4,6,8,12的排班的孩子。有没有什么好办法一次全选? 可以有多个行DIV,我将使用wrapAll将每个行DIV的子级包装到其他DIV中。所以如果我使用wrapAll,它只是将其他行div的所有内容转移到第一个行div。如果我将选择器查询放在循环内部,它只是继续包装子项乘以行divs的数量。我不想让这种事发生。 你们听懂了吗?

  • 问题内容: 我正在使用Spring JPA执行所有数据库操作。但是我不知道如何从Spring JPA的表中选择特定的列? 例如: 问题答案: 你可以从这样的类中在注释中进行设置: 请注意,你将不得不自己进行映射。像这样使用常规映射查找可能会更容易,除非你确实只需要这两个值: 也许也值得看一下Spring数据文档。

  • 我正在使用Spring JPA执行所有数据库操作。但是,我不知道如何在Spring JPA中从表中选择特定的列? 例如:

  • 我从特定目录下的Stackoverflow使用通配符子域获取源代码 原始代码: 它可以正常工作,但上面的代码指向根目录。我希望所有子域都指向我的“公文包”目录中的目录,所以我尝试修改自己的代码 修改后(添加"/投资组合"): 但它给了我“500-内部服务器错误”。。。为什么?有人能纠正我的密码吗? 对我的英语表示感谢和歉意。

  • 我是一个新生的QA,我在这里尝试编写一个Protractor脚本,从下拉列表中选择一个选项。我的下拉列表中有两个选项,我正在尝试从数字中选择它。 这是我正在使用的代码。 默认情况下,选项 2 在页面加载时处于选中状态。我需要的是从下拉列表中选择选项1。但是,我的代码不会这样做。 下面是选择选项的代码片段。 提前感谢:)

  • 使用ESLint是否可以忽略整个目录的一个特定规则? 在我的例子中,我想忽略为一个名为的目录