![](/img/trans.png)
[英]How to get each last modified file timestamp in a folder which is older than 2 hours using java
[英]How to get the first file and also the last modified file using java
如何使用java獲取第一個創建的文件以及最后修改的文件。
我在下面編寫了用於獲取上次修改日期和時間的代碼段,如何獲取文件夾中第一個創建文件的日期。
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long time = directory.lastModified();
System.out.println(sdf.format(time));
雖然舊的File
類確實提供了我們在這里需要的東西,但我總是使用更現代的 Java NIO(新 IO,因為 Java 1.7)包進行文件操作。 它提供了更多的操作,所以只是為了讓我的代碼為File
可能不支持的任何未來需求做好准備。 在某些情況下,它也更適合使用,例如它為流操作提供了一些支持(顯然是從 Java 1.8 開始)。
我強烈建議您使用 java.time,現代 Java 日期和時間 API,用於您的日期和時間工作。
這兩個建議toInstant
因為java.nio.file.attribute.FileTime
有一個toInstant
方法可以轉換為java.time.Instant
。
要查找最近最少修改的文件(其最后一次修改時間最長):
Path dp = Paths.get("/path/to/your/dir");
Optional<Path> firstModified = Files.list(dp)
.min(Comparator.comparing(f -> getLastModified(f)));
firstModified.ifPresentOrElse(
p -> System.out.println("" + p + " modified "
+ getLastModified(p).atZone(ZoneId.systemDefault())
.format(FORMATTER)),
() -> System.out.println("No files"));
示例輸出:
./useCount.txt 修改時間 2016-12-26 15:11:54
代碼使用了這個輔助方法:
private static Instant getLastModified(Path p) {
try {
return Files.readAttributes(p, BasicFileAttributes.class).lastModifiedTime().toInstant();
} catch (IOException ioe) {
throw new IllegalStateException(ioe);
}
}
——還有這個格式化程序:
private static final DateTimeFormatter FORMATTER
= DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss", Locale.ROOT);
對於創建時間而不是最后修改時間,請在此行中使用creationTime()
;
return Files.readAttributes(p, BasicFileAttributes.class).creationTime().toInstant();
對於最后修改的文件,只需在此行中使用max()
而不是min()
:
.max(Comparator.comparing(f -> getLastModified(f)));
./bin 修改時間 2021-10-12 07:57:08
順便說一下,您的問題中使用的directory.lastModified()
為您提供了上次修改目錄本身的時間。 它(通常)與目錄中的最后一個文件被修改的時間不同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.