繁体   English   中英

File.lastModified值会一直增加吗?

[英]Will File.lastModified value always increase?

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

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

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

我是否可以依靠这样的事实,假设没有犯规行为并且有人手动修改了时间戳,lastModified总是会增加吗? Java文档说这是GMT时代的偏移量,所以即使经过时区调整,它也不会倒退吗?

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

  • 所有FAT (FAT32,FAT16,FAT12)的时间分辨率均为2 second
  • 对于NTFS它是100 ns (yep, 纳秒
  • 在大多数情况下*接近 1 second

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

这也是非常棘手的问题,因为如果您在不同的文件系统(例如FAT32和NTFS)上具有相同的文件,则它们的lastModified时间因时间分辨率不同而有所不同。 现在,由于这个原因,您可能会对未发生的伪造文件更改做出反应-只是FAT32返回的时间与NTFS时间相差1秒。 Web服务器也是如此-如果您不知道服务器文件系统,则不知道HTTP标头中值的时间分辨率是多少。

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

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

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

如果使用NTP之类的方法纠正了时间,则时间可能倒退。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM