在Java中,如何仅选择或过滤在特定时间段内创建的文件

时间:2013-12-26 14:55:01

标签: java file-io filter timestamp

在存在许多文件的文件夹中,我希望只能读取在特定时间戳持续时间之间创建的文件。

要求是这样的: - 来自location \ web \ data \只读取在12/15/2013 11:55:00 PM12/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){}

4 个答案:

答案 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对象。