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