从目录中过滤和选择文件

时间:2012-11-16 05:42:48

标签: java swing file jfilechooser filefilter

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

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

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

最终可能看起来像这样 1

JFileChooser with file filters

  1. 使用代码A Sample FileChooser Program提供的图片。

答案 2 :(得分:2)

您正在寻找的可能是java.io.File#list(filter)

编辑:如果你想搜索整个文件系统,那么你需要递归扫描每个目标:

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

答案 3 :(得分:1)

FilenameFilter filter = new FilenameFilter() {
  public boolean accept(File dir, String name) {
   return (!name.endsWith(".gif") 
    }
};