在存在许多文件的文件夹中,我希望只能读取在特定时间戳持续时间之间创建的文件。
要求是这样的:
- 来自location \ web \ data \只读取在12/15/2013 11:55:00 PM
和12/26/2013 11:54:00 PM
之间创建的文件。
以下是我现有代码中需要上述过滤器的部分:
File directory = new File(fileLoc);
String[] myFiles;
FilenameFilter filter = new FilenameFilter() {
public boolean accept(File directory, String fileName2) {
return fileName2.startsWith(filePrefix);
}};
myFiles = directory.list(filter);
if(myFiles.length < 1) {
System.out.println("No files found");
return;
}
String filePath = "";
for (String fileName:myFiles) {
try {
filePath = fileLoc+fileName;
System.out.println("Parsing:" + filePath);
readFileAsString(filePath);
}
catch(Exception e){}
答案 0 :(得分:1)
查看java文档,为lastModified
对象创建一个名为File
的方法。
http://docs.oracle.com/javase/7/docs/api/java/io/File.html#lastModified%28%29
答案 1 :(得分:1)
感谢@Ben,@ Nicolas-R,@ Basil-Bourque。 通过所有输入(使用listFiles,更改过滤器逻辑和使用joda),这就是我最终制作的&amp;像魅力一样:
File directory = new File(fileLoc);
FileFilter filter = new FileFilter() {
public boolean accept(File file) {
if (!file.isFile()) return false;
LocalDateTime dt = new LocalDateTime(file.lastModified());
if (dt!=null && (interval.contains(dt.toDateTime()) || interval.getEnd().isEqual(dt.toDateTime())))
if (file.getName().startsWith(filePrefix))
return true;
return false;
}};
File[] myFiles = directory.listFiles(filter);
if(myFiles.length < 1) {System.out.println("No files found");return;}
for (File file:myFiles) {
try{
System.out.println(readFileAsString(file));
}catch(Exception e){}
}
答案 2 :(得分:0)
使用listFiles(FileFilter过滤器)
返回表示文件和的抽象路径名数组 此抽象路径名表示的目录中的目录 满足指定的过滤器。
而不是list(FilenameFilter),您只能过滤文件的名称(字符串)。 在“accept”实现中使用lastModified属性来检查日期,不要忘记在文件名前缀上添加旧过滤器!
答案 3 :(得分:0)
正如其他人所说,创建一个过滤器并在循环中访问文件元数据以获取文件的日期。
要比较日期以确定它是否符合您的条件,请使用Joda-Time中的Interval类来定义一对停止日期和开始日期之间的时间跨度。该类及其超类提供了比较方法:包含,重叠,isBefore,isAfter。您可以调用contains
并传递从文件的日期时间元数据构造的DateTime
对象。