【问题标题】:Filtering and selecting files from a directory从目录中过滤和选择文件
【发布时间】:2012-11-16 05:42:47
【问题描述】:

我现在有一个从目录中选择文件的应用程序。我想要做的是能够拥有一个功能,您可以在其中放入文件扩展名,例如.gif.txt 等。单击按钮后,应用程序将运行目录并查找并全选该类型的文件。我必须显示的唯一代码是我当前的应用程序,它没有这些。希望能找到正确的方向或建议。

【问题讨论】:

  • @Bhesh Gurung 我没有投票。我什么都没试过。甚至不知道如何接近它。我知道如何按扩展名过滤文件,但不知道如何将它们全部放在一个地方,类似于在硬盘驱动器中搜索特定文件类型

标签: java swing file jfilechooser filefilter


【解决方案1】:
private List<File> getMatchingFiles(File parent, final String extension) {
    File[] files = parent.listFiles(new FileFilter() {

        public boolean accept(File dir) {
            String name = dir.getName();
            if(name.endsWith(extension)) {
                return true;
            }
        }
    });

    List<File> retval = Arrays.asList( files );
    return retval;
}

【讨论】:

  • 现在我可以将它放入一个 actionevent 并为不同的文件类型添加不同的扩展名?我将拥有一个搜索按钮,例如,当您输入 .jpg 时,这将返回该类型的所有文件?顺便说一句,谢谢。
【解决方案2】:

对于在JFileChooser 中使用,到目前为止提供的所有答案都不是最佳的。而是实施JFileChooser.setFileFilter(javax.swing.filechooser.FileFilter) 以获得最佳用户体验。

它可能最终看起来像这样1

  1. 使用A Sample FileChooser Program提供的代码获得的图像。

【讨论】:

  • +1 表示恐龙时代最糟糕的打印屏幕 :-) phaaaa brrrrr
  • @healix 不是,永远,为什么要重新发明轮子,这也是你的答案和正确的方法,为什么要遍历 File[] ???
  • @mKorbel 那是由“我的伙伴 Google”提供的。我正在寻找JFileChooser+FileFilter 并查看任何扩展列表的图像,..然后我拒绝了一个 40Kb(而且很糟糕)和另一个(非常好的)71Kb 的图像,并选择了小于 6.5 的图像Kb(并显示鼠标指针)。 ;)
  • @mKorbel 当然可以,但我的错,我应该链接到源代码(现在完成)。
  • @mKorbel:这是一张老式的 Mac OS 8 Java 1.2 截图。白垩纪晚期? :-)
【解决方案3】:

您要查找的可能是java.io.File#list(filter)

edit:如果要搜索整个文件系统,则需要递归扫描每个目录:

public static void filter (String dirname, List<File> result) {
    try {
        for (String f : new File(dirname).list()) {
            String filename = dirname + f;
            File theFile = new File(filename);
            if (theFile.isDirectory()) {
                filter(filename + "/", result);
            } else if (new FileFilter() {
                public boolean accept(File pathname) {
                    return pathname.getName().endsWith(".gif");
                }
            }.accept(theFile)) {
                result.add(theFile);
            }
        }
    } catch (Exception e) {
        // may raise null-pointer when access denied
    }
}

public static void main(String[] args) {
    List<File> result = new ArrayList<File>();
    filter("F:/", result);

    System.out.println(result.size());
}

【讨论】:

    【解决方案4】:
    FilenameFilter filter = new FilenameFilter() {
      public boolean accept(File dir, String name) {
       return (!name.endsWith(".gif") 
        }
    };
    

    【讨论】:

      猜你喜欢
      • 2022-01-22
      • 2016-03-17
      • 2011-07-05
      • 2020-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多