java从经常更新的文件中读取

时间:2011-04-07 00:36:56

标签: java file-io

在我的Java应用程序中,在Linux上,我需要定期阅读一些经常更改的文本文件。 (这些文本文件由单独的应用程序更新)。 在尝试更新文件时,我是否需要关注这种罕见的情况?如果是这样,我怎样才能保证我的读取始终不会失败?操作系统是否为我处理此问题,或者我是否可能读取1/2文件?

感谢。

2 个答案:

答案 0 :(得分:1)

操作系统可以帮助您实现一致的读取,但它要求在编写这两个应用程序时考虑到这一点。

简而言之,您在具有独占读/写权限的Java应用程序中打开文件 - 这可以确保在您阅读文件时没有其他人(包括您的其他应用程序)修改该文件。 FileLock类可以帮助您确保您拥有对文件的独占访问权。

然后,您的其他应用会定期尝试写入该文件。如果它在您读取文件的同时执行此操作,则访问将被拒绝,其他应用程序应重试。这是关键部分,因为如果应用程序不期望文件不可用并将其视为致命错误条件,则写入将失败,并且应用程序不会保存数据并可能失败/退出等。

如果其他应用必须始终能够写入文件,那么您必须避免使用独占读取。相反,您必须尝试检测不一致的读取,例如通过在开始阅读时检查上次修改的时间戳,以及何时完成阅读。如果时间戳是相同的,那么你可以去获得一致的读数。

答案 1 :(得分:0)

是的,您需要担心这一点。

不,您的读取不应该“失败”AFAIK,除非该文件暂时被锁定,您可以在其中捕获异常并在短暂停顿后再次尝试。但是,您可能会获得比预期更多或更少的数据。

(如果您发布代码,我们可能会更准确地评论会发生什么。)