匹配搜索间隔的Java文件名筛选器

匹配搜索间隔的Java文件名筛选器,java,file,Java,File,我试图在历史问题中找到我问题的答案,但找不到。这就是我的问题 让我们设想一个目录结构如下: project | -- 20150201 | -- 20150202 | | -- 1423500700241.xml | | -- 1423500720009.xml | | -- 1423500760005.xml | -- 20150203 | | -- 1423500780006.xml | | -- 1423500800006.xml | -- 20150204 |

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

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

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方法的方式。您不应该使用目录的上次修改日期和当前日期,而应该单独使用目录名称来实现您的目标

        @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方法可用于获取初始日期和结束日期之间的所有文件的列表,不包括初始日期和结束日期

问题是我的文件夹结构中有“report”文件夹,它抛出java.text.ParseException:unparseabledate:report。如果像我在回答中那样添加try-catch,则不会发生这种情况。而且,这不是代码的唯一问题。您还使用了last modified,而不是accept方法中的实际目录名。报表文件夹将被跳过。仅返回名称可以解析为有效日期的文件夹以及满足日期间隔的文件夹。然后,您可以迭代通过筛选得到的文件夹,并逐个读取其中的文件。如果你需要更多的澄清,请告诉我。如果这对你有效,请投票并将答案标记为已接受。