使用FileUtils.listFiles递归查找目录 [英] Recursively finding only directories with FileUtils.listFiles

查看:2498
本文介绍了使用FileUtils.listFiles递归查找目录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想收集目录下的所有文件列表,特别是包括子目录。我不喜欢自己做事,所以我在Apache Commons IO中使用 FileUtils.listFiles 。所以我有类似的东西:

I want to collect a list of all files under a directory, in particular including subdirectories. I like not doing things myself, so I'm using FileUtils.listFiles from Apache Commons IO. So I have something like:

import java.io.File;
import java.util.Collection;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.TrueFileFilter;

public class TestListFiles {
  public static void main(String[] args) {
    Collection<File> found = FileUtils.listFiles(new File("foo"),
        TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
    for (File f : found) {
      System.out.println("Found file: " + f);
    }
  }
}

问题是,这只出现找到普通文件,而不是目录:

Problem is, this only appears to find normal files, not directories:

$ mkdir -p foo/bar/baz; touch foo/one_file
$ java -classpath commons-io-1.4.jar:. TestListFiles
Found file: foo/one_file

我已经传递 TrueFileFilter 到两个过滤器,所以我想不出更具包容性的东西。我希望它列出:foo,foo / one_file,foo / bar,foo / bar / baz(按任意顺序)。

I'm already passing TrueFileFilter to both of the filters, so I can't think of anything more inclusive. I want it to list: "foo", "foo/one_file", "foo/bar", "foo/bar/baz" (in any order).

我也会接受非 FileUtils 解决方案,但是编写我自己的BFS,甚至是愚蠢的从我得到的列表中收集父目录集。 (无论如何,这都会错过空的子目录。)这是在Linux上,FWIW。

I would accept non-FileUtils solutions as well, but it seems silly to have to write my own BFS, or even to collect the set of parent directories from the list I do get. (That would miss empty subdirectories anyway.) This is on Linux, FWIW.

推荐答案

一个旧答案,但这对我有用:

An old answer but this works for me:

FileUtils.listFilesAndDirs(new File(dir), TrueFileFilter.INSTANCE, DirectoryFileFilter.DIRECTORY);

同时显示:

我使用:

FileUtils.listFilesAndDirs(new File(dir), new NotFileFilter(TrueFileFilter.INSTANCE), DirectoryFileFilter.DIRECTORY)

仅显示目录而非文件......

Only shows directories and not files...

这篇关于使用FileUtils.listFiles递归查找目录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆