将文件.上次修改值始终增加



我正在尝试监视一个文件,以了解在Windows或Linux上运行的Java中的更改。

目前,我正在研究轮询文件的最后修改属性,而不是挂钩到操作系统文件事件中,以避免处理平滑 API 差异和处理异步事件。

处理完文件后,我会存储new File("path").lastModified()的结果,并每 x 秒比较一次新的lastModified结果。

我是否可以依靠这样一个事实,假设没有犯规并且有人手动修改时间戳,lastModified 将始终增加?Java 文档说它是 GMT 纪元的偏移量,所以大概即使调整时区也不会倒退?

嗯,有时,lastModified不会增加。这完全与时间分辨率有关,并且每个文件系统中的分辨率都不同:

  • 所有FAT(FAT32,FAT16,FAT12)都具有2 second的时间分辨率,
  • 对于NTFS它是100 ns(是的,纳秒
  • 对于大多数*取消1 second.

因此,如果您的文件会快速更改,lastModified也不会更改,并且您的显示器可能会丢失一些更改。

这也是非常棘手的,因为如果您在不同的文件系统(如 FAT32 和 NTFS)上有相同的文件,它们的lastModified时间因时间分辨率不同而有所不同。现在,因为 ot,您可能会对未发生的虚假文件更改做出反应 - 这只是FAT32返回的时间与NTFS时间不同 1 秒。Web 服务器也是如此 - 如果您不知道服务器文件系统,那么您就不知道 HTTP 标头中值的时间解析是多少。

解决方法是假设,如果存储值和 FS 值之间的差异小于 3-4 秒,则文件不会更改。这就是WebStart在服务器上检查新版本的JAR文件时所做的。

您可以将

文件的时间戳更改为任何内容

http://unixhelp.ed.ac.uk/CGI/man-cgi?touch

如果使用 NTP 之类的东西来校正时间,它可能会倒退。

这些情况很少见,您可能不需要担心。

相关内容

  • 没有找到相关文章

最新更新