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

标签 java file-io

在 Linux 上的 Java 应用程序中,我需要定期读取一些经常更改的文本文件。 (这些文本文件由单独的应用程序更新)。 当我尝试在文件更新时读取文件时,我是否需要担心这种罕见的情况?如果是这样,我如何保证我的读取总是返回而不会失败?操作系统是否会为我处理这个问题,或者我是否可以读取 1/2 个文件?

谢谢。

最佳答案

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

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

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

如果其他应用程序必须始终能够写入文件,那么您必须避免使用独占读取。相反,您必须尝试检测不一致的读取,例如在开始读取时和完成读取时检查上次修改的时间戳。如果时间戳相同,那么您就可以进行一致的读取。

关于java从经常更新的文件中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5574568/

相关文章:

java - Webdriver - Firefox 56(64 位)更新后超时不起作用

java - 在java中并行化网络请愿

jQuery 1.9 不会在旧版 Firefox 中冒泡文件选择/更改事件

linux - 将文本插入文本文件

python - 以 'rt' 和 'wt' 模式打开文件

regex - 将输出打印到 perl 中的文件

java - 读取 Excel 文件的内存高效 Java 库?

java - 在需要预处理的情况下,如何在 weka 中正确分类文本

java - 如何在 Wildfly 9 中启用 JSP 的即时编译?

java - 如何衡量 C++ 或 Java 文件的复杂性?