有一个文件 - 存储在供应商经常更新的外部服务器上。我的应用程序每分钟轮询该文件以获取值。我正在做的就是阅读文件。
我担心这样做我可能会无意中锁定文件,因此供应商也无法编写它。这是一种可能吗?
亲切的问候
除了 Eric 的回答 - 您可以检查临时文件的 Last Modified 属性,并且仅在它更改时将其与您的“工作”文件合并 - 这应该可以保护您免受读/写冲突,并且仅在供应商写入后才合并文件温度。虽然这很混乱并且 mrab 的评论是有效的,但应该找到更好的解决方案。
有用于卷的Windows 卷影复制服务。这将允许读取备份副本。
如果第三方软件也在 java 中,并且使用 Logger,那应该是可调整的:每分钟从 10 个文件左右写入到下一个。
我会尝试无情地读取文件(自上次读取后修改时),直到出现问题。也许您可以在周末或午夜进行数百次读取的测试运行,而不会造成任何伤害。
我的回答: 也许你需要一个本地监视程序,一个目录器的监视服务,它等到文件被修改,然后快速启动;之后,允许传输副本。
我已经多次遇到这个问题,正如 Peter Lawrey 所说,没有任何可移植的方法可以做到这一点,如果你的环境是 Unix,这根本不应该是一个问题,因为这些并发访问条件由操作系统正确管理. 然而,windows 根本不处理这个问题(是的,这是使用业余操作系统进行生产工作的结果,哈哈)。
话虽如此,如果您的供应商足够灵活,就有办法解决这个问题。他们可以写入临时文件,完成后将临时文件移动到最终目的地。通过这样做,您可以避免您和供应商之间对文件的任何并发访问。
另一种方法是准确(困难?)知道供应商更新的时间,并避免在某些时间范围内读取文件。例如,如果您的供应商每小时更新一次文件,请避免从 5 点到 5 点读取。
希望能帮助到你。