Java 文件名过滤器以匹配搜索间隔

Java file name filter to match a search interval

我试图在问题历史记录中找到问题的答案,但找不到。所以这是我的问题。

让我们假设一个目录结构如下:

project
| -- 20150201
| -- 20150202
|   | -- 1423500700241.xml
|   | -- 1423500720009.xml
|   | -- 1423500760005.xml
| -- 20150203
|   | -- 1423500780006.xml
|   | -- 1423500800006.xml    
| -- 20150204
|   | -- 1423500820005.xml
|   | -- 1423500840008.xml    
| -- report

我想要的是从用户选择的日期开始处理目录内的文件;

示例:

当用户搜索 20150201 到 20150203 时,我需要处理目录中的文件。

到目前为止我这样做了:

public class FileFilterDateIntervalUtil implements Serializable, FilenameFilter {
    private static final long serialVersionUID = 226591338838691089L;

    private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMdd");

    private String initialDate;
    private String endingDate;

    public FileFilterDateIntervalUtil(String initialDate, String endingDate) {
        this.initialDate = initialDate;
        this.endingDate = endingDate;
    }

    @Override
    public boolean accept(File dir, String name) {
        String currentDate = DATE_FORMAT.format(new Date(new File(dir, name).lastModified()));

        return ( (this.initialDate.compareTo(currentDate) < 0) && (this.endingDate.compareTo(currentDate) >= 0) );
    }
}

但是当我这样做时,我搜索了最后修改的文件,这不是我想要的,我想按日期间隔搜索目录名称。

有人可以帮助我吗?

谢谢。

问题似乎出在您实现 accept 方法的方式上。与其使用目录的上次修改日期和当前日期,不如单独使用目录名称来实现 objective。

        @Override
        public boolean accept(File dir, String name) {
            Date dirDate = null;
            try {
                dirDate = DATE_FORMAT.parse(name.trim());
            } catch(Exception e) {
                System.out.println("Cannot parse date "+name+" reason "+e.getMessage());
                return false;
            }

            String dirDateStr = DATE_FORMAT.format(dirDate);

            return initialDate.compareTo(dirDateStr) * dirDateStr.compareTo(endingDate) > 0;
        }

上述accept方法可用于获取起始日期和结束日期之间(不包括起始日期和结束日期)的所有文件的列表。