【问题标题】:How to get the first file and also the last modified file using java如何使用java获取第一个文件以及最后修改的文件
【发布时间】:2021-11-02 09:11:08
【问题描述】:

如何使用 java 获取第一个创建的文件和最后修改的文件。

我在 sn-p 下面写了获取最后修改的日期和时间,我怎样才能得到文件夹中第一个创建文件的日期。

DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long time = directory.lastModified();
System.out.println(sdf.format(time));

【问题讨论】:

标签: java file datetime last-modified


【解决方案1】:

Java NIO 和 java.time

虽然旧的 File 类确实提供了我们在这里需要的东西,但我总是使用更现代的 Java NIO(新 IO,自 Java 1.7 起)包进行文件操作。它提供了更多操作,所以只是为了让我的代码为File 可能不支持的任何未来需求做好准备。在某些情况下,它也更好地使用,例如它为流操作提供了一些支持(显然是从 Java 1.8 开始)。

我非常肯定地建议您使用现代 Java 日期和时间 API java.time 来进行日期和时间工作。

这两个建议很好地结合在一起,因为java.nio.file.attribute.FileTime 具有用于转换为java.time.Instant 的toInstant 方法。

要查找最近最少修改的文件(其最后一次修改时间最长):

    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() 为您提供了上次修改目录本身的时间。它(通常)与目录中最后一个文件被修改的时间不同。

教程链接

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    相关资源
    最近更新 更多