我试图在问题历史记录中找到问题的答案,但找不到。这就是我的问题。
让我们想象一下 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) );
}
}
但是当我这样做时,我搜索最后修改的文件,这不是我想要的,我想按日期间隔按目录名称搜索。
有人可以帮助我吗?
谢谢。
最佳答案
问题似乎出在您实现接受方法的方式上。您应该单独使用目录名称来实现您的目标,而不是使用目录的上次修改日期和当前日期。
@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 文件名过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28415569/