2

我可以使用以下代码获取上次访问时间。

public Date getLastAccessTime(String filePath) throws IOException {
    File f = new File(filePath);
    BasicFileAttributes basicFileAttributes = Files.getFileAttributeView(
        f.toPath(),
        BasicFileAttributeView.class).readAttributes();
    Date accessTime = new Date(basicFileAttributes.lastAccessTime().toMillis());
    return accessTime;
}

但在我的 linux 系统中,它在 /etc/fstab 中被配置为“relatime”。

是否有必要在 /etc/fstab 中启用“atime”以获得准确的上次访问时间?

4

1 回答 1

4

是否有必要在 /etc/fstab 中启用“atime”以获得准确的上次访问时间?

简短的回答:是的

在 Linux 上,JDK 使用sys_stat64()系统调用来检索有关文件的信息。如果内核在访问文件时不更新该st_atime字段,则 Java 无法获得此信息。

Linux 2.6.30 更改了 Linux 内核关于 st_atime 更新策略的默认行为。relatime现在是默认行为。这意味着st_atime仅在st_mtime或更新时才st_ctime更新,而不是在访问文件时更新。如果你想要的行为,你可以使用strictatime. 有关更多信息,请参见 mount 手册页(搜索atimenoatimerelatimestrictatime)。

于 2013-03-21T13:14:59.043 回答