簡體   English   中英

如何使用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));

Java NIO 和 java.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM