簡體   English   中英

在Java中,如何僅選擇或過濾在特定時間段內創建的文件

[英]In Java, how to only pick or filter files created between during a specific time period

在存在許多文件的文件夾中,我希望能夠只讀取在特定時間戳持續時間之間創建的那些文件。

要求類似於: - 從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){}

看一下java文檔,這是一個名為lastModified的方法,用於File對象。

http://docs.oracle.com/javase/7/docs/api/java/io/File.html#lastModified%28%29

謝謝@Ben,@ Nicolas-R,@ Basil-Bourque。 通過所有輸入(使用listFiles,更改過濾器邏輯和使用joda),這就是我最終制作並且像魅力一樣工作:

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){}
}

使用listFiles(FileFilter過濾器)

返回一個抽象路徑名數組,表示此抽象路徑名表示的目錄中滿足指定過濾器的文件和目錄。

而不是列表(FilenameFilter),您只能過濾文件的名稱(字符串)。 在“accept”實現中使用lastModified屬性來檢查日期,不要忘記在文件名前綴上添加舊過濾器!

正如其他人所說,創建一個過濾器並在循環中訪問文件元數據以獲取文件的日期。

要比較日期以查看它是否符合您的條件,請使用Joda-Time中的Interval類來定義一對停止日期和開始日期之間的時間跨度。 該類及其超類提供了比較方法:包含,重疊,isBefore,isAfter。 您將調用contains並傳遞從文件的日期時間元數據構造的DateTime對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM