gpt4 book ai didi

java - File.lastModified 值会一直增加吗?

转载 作者:搜寻专家 更新时间:2023-11-01 02:13:52 26 4
gpt4 key购买 nike

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

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

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

我可以相信这样一个事实吗?假设没有犯规并且有人手动修改了时间戳,lastModified 会一直增加吗? Java 文档说它是 GMT 纪元的偏移量,因此即使调整时区也不会倒退?

最佳答案

嗯,有时候,lastModified 不会增加。一切都与时间分辨率有关,每个文件系统的分辨率都不同:

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

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

这也很棘手,因为如果您在不同的文件系统(如 FAT32 和 NTFS)上有相同的文件,它们的 lastModified 时间因时间分辨率不同而不同。现在正因为如此,您可能会对未发生的假文件更改使用react - 它只是 FAT32 返回的时间与 NTFS 相差 1 秒 时间。 Web 服务器也是如此 - 如果您不知道服务器文件系统,那么您就不知道 HTTP header 中值的时间分辨率是多少。

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

关于java - File.lastModified 值会一直增加吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11137948/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com