我正在尝试监视文件以查找在Windows或Linux上运行的Java的更改。
目前我正在研究轮询文件的最后修改属性,而不是挂钩到OS文件事件,以避免处理API差异的平滑和处理异步事件。
我处理完文件后会存储new File("path").lastModified()
的结果,并且每隔lastModified
秒比较新的x
个结果。
我能否依赖这样一个事实:假设没有犯规并且有人手动修改时间戳,lastModified将永远增加? Java文档说这是GMT时代的偏移量,所以即使进行时区调整,它也不会倒退?
答案 0 :(得分:5)
嗯,有时,lastModified
不会增加。这完全取决于时间分辨率,每个文件系统的分辨率都不同:
FAT
s(FAT32,FAT16,FAT12)的时间分辨率为2 second
,NTFS
它是100 ns
(是的,纳秒)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之类的东西来纠正时间,它可以倒退。
这些情况很少见,可能不需要担心。