【问题标题】:FileUtils.listFiles to exclude specific file extensions from listingFileUtils.listFiles 从列表中排除特定的文件扩展名
【发布时间】:2020-04-22 13:56:29
【问题描述】:

我使用此代码递归地从给定目录中获取所有文件。

List<File> fileList = (List<File>) FileUtils.listFiles(new File(directoryName), null , true);

我想从列表中排除一些文件,所以方法的第二个参数值不适合这个目的。 我也尝试使用notFileFilter,但我不能递归使用它。

FileFilter fileFilter1 =   FileFilterUtils.notFileFilter(FileFilterUtils.nameFileFilter(".info", null));
List<File> fileList = (List<File>) FileUtils.listFiles(new File(directoryName), fileFilter1, true);

【问题讨论】:

标签: java apache-commons fileutils


【解决方案1】:

使用listFiles方法的其他重载

FileFilter notInfoFilter = FileFilterUtils.notFileFilter(
        FileFilterUtils.suffixFileFilter(".info", IOCase.SYSTEM));

Collection<File> files = FileUtils.listFiles(
        new File(directoryName), notInfoFilter, TrueFileFilter.INSTANCE);

【讨论】:

    【解决方案2】:

    对于 Java 8 及更高版本,您可以使用轻松的流 api 来完成

    List<File> filteredList = fileList.stream().filter(f -> f.getName().endsWith(".some_extension")).collect(Collectors.toList());
    

    【讨论】:

    • 谢谢,但我无法列出所有可能的文件扩展名,只是需要排除的内容。
    • @plaidshirt 然后使用f -&gt; ! f.getName().endsWith(".info")
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 2018-03-04
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多