如何在java中获取目录的最后修改日期和时间

Vas*_*mar 8 java windows filesystems metadata

看,问题是在Java中,我们可以获得lastmodified date filename.lastModified().但在Windows中,正在发生的事情是,无论何时修改文件,只修改该文件的日期和时间,而不是整个文件夹.所以我想知道最后一次使用Java在该文件夹中修改单个文件的时间是什么时候?

Boh*_*ian 8

找到lastModified()目录文件中的最新(最大),如果没有,请使用目录本身:

public static Date getLastModified(File directory) {
    File[] files = directory.listFiles();
    if (files.length == 0) return new Date(directory.lastModified());
    Arrays.sort(files, new Comparator<File>() {
        public int compare(File o1, File o2) {
            return new Long(o2.lastModified()).compareTo(o1.lastModified()); //latest 1st
        }});
    return new Date(files[0].lastModified());
}
Run Code Online (Sandbox Code Playgroud)

仅供参考此代码已经过测试(并且有效).

  • 嗨@波西米亚人♦@prateek说有一个错误.您需要将结果与目录的上次修改时间进行比较,因为在删除的情况下,上次修改时间实际上是目录的上次修改时间. (2认同)

Sou*_*hat 5

我编写了一小段代码,它在所有子目录中进行递归搜索并返回最新的修改日期。它会进行深度搜索,因此您可能不想在根目录等上运行它。代码如下(我没有经过严格测试):

private static long getLatestModifiedDate(File dir) {
    File[] files = dir.listFiles();
    long latestDate = 0;
    for (File file : files) {
        long fileModifiedDate = file.isDirectory() 
                ? getLatestModifiedDate(file) : file.lastModified();
        if (fileModifiedDate > latestDate) {
            latestDate = fileModifiedDate;
        }
    }
    return Math.max(latestDate, dir.lastModified());
}
Run Code Online (Sandbox Code Playgroud)

它假设提供的File是一个目录,并且还返回一个long不是Date本身的目录。如果需要(通常不需要),您可以使用 的构造函数long进行转换。DateDate


Ami*_*nde 0

如果您使用的是 Java7,则可以使用WatchService。