我可以使用下面的代码获得最后访问时间。
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_mtime
或st_ctime
更新时才会更新st_atime
,而不是在访问文件时更新。如果您想要旧的行为,您可以使用strictatime
。查看mount手册页了解更多信息(搜索atime
、noatime
、relatime
、strictatime
)。