首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用FileUtils.listFiles递归查找目录

使用FileUtils.listFiles递归查找目录
EN

Stack Overflow用户
提问于 2009-05-23 01:50:12
回答 5查看 48.8K关注 0票数 18

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

代码语言:javascript
复制
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);
    }
  }
}

问题是,这似乎只查找普通文件,而不是目录:

代码语言:javascript
复制
$ 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" (以任何顺序)。

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

EN

回答 5

Stack Overflow用户

发布于 2012-10-18 00:21:08

一个老生常谈的答案,但这对我很有效:

代码语言:javascript
复制
FileUtils.listFilesAndDirs(new File(dir), TrueFileFilter.INSTANCE, DirectoryFileFilter.DIRECTORY);

同时显示以下两项:

我使用:

代码语言:javascript
复制
FileUtils.listFilesAndDirs(new File(dir), new NotFileFilter(TrueFileFilter.INSTANCE), DirectoryFileFilter.DIRECTORY)

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

票数 21
EN

Stack Overflow用户

发布于 2011-02-01 18:24:30

你有没有简单地尝试过:

代码语言:javascript
复制
File rootFolder = new File(...);
File[] folders = rootFolder.listFiles((FileFilter) FileFilterUtils.directoryFileFilter());

它似乎对我很有效。当然,您需要使用递归。

希望能有所帮助。

票数 8
EN

Stack Overflow用户

发布于 2009-05-23 04:23:55

在我的大多数重要应用程序中,我都避免使用Java IO库,而是更喜欢Commons VFS。我相信使用适当的参数调用this method将会实现您的目标,但我承认要实现这个功能还有很长的路要走。

具体地说,此代码将执行您想要的操作:

代码语言:javascript
复制
    FileObject[] files = fileObject.findFiles(new FileSelector() {
        public boolean includeFile(FileSelectInfo fileInfo)  {
            return fileInfo.getFile().getType() == FileType.FOLDER; }

        public boolean traverseDescendents(FileSelectInfo fileInfo) {
            return true;
        }
    });

其中FileObject是fileObject的一个实例。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/900659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档