如何使用apache-commons-io FileUtils.listFilesAndDirs过滤具有名称的目录的所有目录和子目录?

时间:2019-05-15 10:04:51

标签: java apache-commons-io

我必须使用FileUtils.listFilesAndDirs方法从具有多个子目录的大型目录中递归过滤两个特定的文件夹路径。那我必须使用什么过滤器。

例如,我要递归过滤目录“结果”和“日志”的所有目录子目录路径。

谢谢。

我尝试过nameFileFilter,但是它仅针对一个目录进行过滤,而不是递归过滤。

public static void main(String[] args) {
    IOFileFilter filter1 = 
FileFilterUtils.notFileFilter(FileFilterUtils.nameFileFilter("results", 
null));
IOFileFilter filter2 
=FileFilterUtils.notFileFilter(FileFilterUtils.nameFileFilter("logs", 
null));
FileFilter filter = FileFilterUtils.and(filter1, filter2);
List<File> filteredFiles = (List<File>)FileUtils.listFilesAndDirs(new 
File(args[0]), TrueFileFilter.INSTANCE, (IOFileFilter)fileFilter);

For( File file : filteredFiles) {
    System.out.println(file.getAbsolutePath());
}
}

我需要过滤名称为“ results”和“ logs”的所有目录和子目录

1 个答案:

答案 0 :(得分:0)

以下代码可帮助您递归过滤文件。

public static void main(String[] args) {
    IOFileFilter filter1 = FileFilterUtils.notFileFilter(FileFilterUtils.nameFileFilter("results"));
    IOFileFilter filter2 = FileFilterUtils.notFileFilter(FileFilterUtils.nameFileFilter("logs"));

    FileFilter filter = FileFilterUtils.andFileFilter(filter1, filter2);

    Collection<File> filteredFiles = FileUtils.listFiles(new File("/media/data/test-file-io"),
        TrueFileFilter.INSTANCE, (IOFileFilter) filter);

    for (File file : filteredFiles) {
      System.out.println(file.getAbsolutePath());
    }
  }

在这里我使用以下common-io依赖项

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-io</artifactId>
    <version>1.3.2</version>
</dependency>