![](/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.