在 Linux 上的 Java 应用程序中,我需要定期读取一些经常更改的文本文件。 (这些文本文件由单独的应用程序更新)。 当我尝试在文件更新时读取文件时,我是否需要担心这种罕见的情况?如果是这样,我如何保证我的读取总是返回而不会失败?操作系统是否会为我处理这个问题,或者我是否可以读取 1/2 个文件?
谢谢。
最佳答案
操作系统可以帮助您实现一致的读取,但它要求两个应用程序在编写时都考虑到这一点。
简而言之,您可以使用独占读/写权限在 Java 应用程序中打开该文件 - 这可以确保在您读取该文件时,没有其他人(包括您的其他应用程序)修改该文件。 FileLock类可以帮助您确保您对文件具有独占访问权限。
然后,您的其他应用程序将定期尝试写入该文件。如果它在您读取文件的同时执行此操作,则访问将被拒绝,并且其他应用程序应重试。这是关键部分,因为如果应用程序不希望文件不可用并将其视为 fatal error 条件,则写入将失败,并且应用程序不会保存数据并可能失败/退出等。
如果其他应用程序必须始终能够写入文件,那么您必须避免使用独占读取。相反,您必须尝试检测不一致的读取,例如在开始读取时和完成读取时检查上次修改的时间戳。如果时间戳相同,那么您就可以进行一致的读取。
关于java从经常更新的文件中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5574568/