读取外部日志文件而不创建文件锁定



尝试逐行读取日志文件(在 Java 中)。此日志文件正由另一个进程(非 java 程序)同时写入。

我有两种方法 -

    BufferedReader (BufferedReader
  1. br = new BufferedReader(new FileReader(logFile));)
  2. RandomAccessFile (RandomAccessFile
  3. accessFile = new RandomAccessFile(logFile.getAbsolutePath(), "r");)

这两种方法是否都会导致文件被锁定,直到我在缓冲读取器/随机访问文件对象上调用"关闭"方法?

是否有任何其他方法(Java)可以读取文件,以使文件不会被其他进程/程序锁定/阻止?

PS - 在我所有的搜索中,我遇到了这个问题的多个答案/解决方案(旧和新)。我只想寻求澄清/结束这个问题。

看看这个: Java:打开和读取文件而不锁定它

如果非 Java 进程在写入时对文件具有独占锁,则其他进程可能无法读取它。 当然,这可能因操作系统而异。 您可能想看看操作系统在非 Java 进程运行时对文件锁定的看法。

如果共享锁可用,则java.nio可能允许对锁定行为进行更多控制:http://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileChannel.html

从性能角度来看,BufferedReader 比 RandomAccessFile 更可取,但除非操作系统友好地为您锁定文件,否则它们都不会锁定文件,在这种情况下,关闭文件将释放它。

但是,如果其他人正在写入文件,操作系统也可能完全阻止您读取该文件。

在另一个进程写入顺序文件时读取顺序文件不是好的设计。您根本不应该真正读取日志文件。日志文件供人类使用。您应该使用数据库。

相关内容

  • 没有找到相关文章

最新更新