在java中的FileUtils listFiles上强加两个条件

时间:2016-01-22 07:59:11

标签: java file-handling fileutils

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

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

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

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

请提出一些建议。

2 个答案:

答案 0 :(得分:2)

您想使用AndFileFilter

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

答案 1 :(得分:1)

您可以滚动自己的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);