是否有必要在 /etc/fstab 中启用"atime"才能在 Java 中获取正确的上次访问时间?



我可以使用下面的代码获得最后访问时间。

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"以获得准确的最后访问时间?

是否有必要在/etc/fstab中启用"atime"以获得准确的最后访问时间?

简短回答:Yes

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

Linux内核对st_atime更新策略的默认行为已在Linux 2.6.30中更改。relatime现在是默认行为。这意味着只有当st_mtimest_ctime更新时才会更新st_atime,而不是在访问文件时更新。如果您想要旧的行为,您可以使用strictatime。查看mount手册页了解更多信息(搜索atimenoatimerelatimestrictatime)。

相关内容

  • 没有找到相关文章

最新更新