java - 如何使用java获取第一个文件以及最后修改的文件
问题描述
如何使用 java 获取第一个创建的文件以及最后修改的文件。
我在下面编写了获取上次修改日期和时间的代码段,如何获取文件夹中第一个创建文件的日期。
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long time = directory.lastModified();
System.out.println(sdf.format(time));
解决方案
Java NIO 和 java.time
虽然旧File
类确实提供了我们在这里需要的东西,但我总是使用更现代的 Java NIO(新 IO,自 Java 1.7 起)包进行文件操作。它提供了更多操作,因此只是为了让我的代码为将来File
可能不支持的任何需求做好准备。在某些情况下,它也更好地使用,例如它为流操作提供了一些支持(显然是从 Java 1.8 开始)。
我非常肯定地建议您使用现代 Java 日期和时间 API java.time 来进行日期和时间工作。
这两个建议很好地结合在一起,因为 ajava.nio.file.attribute.FileTime
具有toInstant
转换为 a 的方法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()
,您问题中使用的方式为您提供了目录本身最后一次修改的时间。它(通常)与目录中最后一个文件被修改的时间不同。
教程链接
- Jenkov 上的Java NIO 教程
- Oracle 教程:日期时间解释如何使用 java.time。
推荐阅读
- flutter - 检查列表内容是否为空
- angular - angular2 formGroup 的唯一值验证器
- python - 访问 Python 数据结构
- python - 从 api [Python] 调用的多个长时间运行的任务
- java - 正则表达式查找字符串是否包含 1 次或多次出现的数字 6
- routes - 道路/车道数据 - 路由 v7
- c# - .NET 项目中的方法的 .NET Core API 调用说它在 app.config 文件中找不到连接字符串
- excel - 根据每个任务的时间平均分配任务给员工
- powershell - 如何使用 Powershell 收集 CPU 和 RAM 信息并显示在一张表中
- javascript - 如何在不替换条件的情况下随机化?