[英]How to enable certain functions only for a specific period of time in apps?
[英]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 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){}
看一下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.