我试图在问题历史记录中找到问题的答案,但找不到。所以这是我的问题。
假设a具有这样的目录结构:
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方法可用于获取介于起始日期和结束日期(不包括起始日期和结束日期)之间的所有文件的列表。
关于java - Java文件名过滤器以匹配搜索间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28415569/