在 java 中对 FileUtils listFiles 施加两个条件

Imposing two conditions on FileUtils listFiles in java

我只想选择那些具有“txt”扩展名且存在时间超过 1 分钟的文件。有没有办法在 listFiles 方法中强制执行这两个条件?

为了确保它只选择 txt 文件,我就是这样做的

    Collection<File> myFiles = FileUtils.listFiles(FileUtils.getFile(inputPath),
                                   FileFilterUtils.suffixFileFilter(".txt"),
                                   null);

我可以在 FileUtils 中找到 isFileOlder() 方法,但是如何对它施加两个限制?

请提出一些方法。

您想使用 AndFileFilter

这使您可以将任意两个文件过滤器组合为一个布尔值。由于没有针对年龄标准提供的文件过滤器,您仍然需要创建一个,按照其他评论的行。

您可以推出自己的 IOFileFilter ,这将进行两项检查:

public class MyFileFilter implements IOFileFilter {

String extension;
Date maxDate;

   public MyFileFilter(String extension, Date maxDate){
    this.extension = extension;
    this.maxDate = maxDate;
    }

    @Override
    public boolean accept(File dir, String name) {

        return false;
    }

    @Override
    public boolean accept(File file) {

    boolean suffixMatches = file.getName().endsWith(extension);
    boolean timeMatches = FileUtils.isFileOlder(file, maxDate);

    return suffixMatches && timeMatches ;
    }
}

那么你可以这样称呼它:

String extension = ".txt";

// compute current date minus 1 minute
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.MINUTE, -1);
Date maxDate = cal.getTime();

Collection<File> myFiles = FileUtils.listFiles(FileUtils.getFile(inputPath),new MyFileFilter(extension,maxDate) ,
            null);