File.lastModified值总是会增加吗?

时间:2012-06-21 12:16:41

标签: java datetime timezone last-modified

我正在尝试监视文件以查找在Windows或Linux上运行的Java的更改。

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

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

我能否依赖这样一个事实:假设没有犯规并且有人手动修改时间戳,lastModified将永远增加? Java文档说这是GMT时代的偏移量,所以即使进行时区调整,它也不会倒退?

2 个答案:

答案 0 :(得分:5)

嗯,有时,lastModified不会增加。这完全取决于时间分辨率,每个文件系统的分辨率都不同:

  • 所有FAT s(FAT32,FAT16,FAT12)的时间分辨率为2 second
  • 代表NTFS它是100 ns(是的,纳秒
  • 对于大多数 * nixes 1 second

因此,如果您的文件发生快速变化,lastModified将不会更改,而您的监视器可能会失去一些更改。

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

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

答案 1 :(得分:1)

您可以将文件的时间戳更改为任何内容

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

如果使用像NTP之类的东西来纠正时间,它可以倒退。

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