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

标签 java file filelock randomaccessfile

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

我有两种方法 -

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

这两种方法都会导致文件被锁定,直到我在 BufferedReader/RandomAccessFile 对象上调用“close”方法吗?

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

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

最佳答案

看看这个:Java: opening and reading from a file without locking it

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

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

关于java - 读取外部日志文件而不创建文件锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13445415/

相关文章:

java - 我的蛇不会开始移动

Java - UnixFileSystem - 列表如何对 child 进行排序?

java - 将项目拆分为两个文件

linux - 在 AIX/Linux 中复制文件和元数据

c# - 我可以防止 StreamReader 在使用时锁定文本文件吗?

java - 在 Java 中锁定文件 channel 时出现 OverlappingFileLockException

java - [requestPayload] 的对象映射尝试将字段 [requestPayload] 解析为对象,但找到了具体值

linux - 在外部网上分发文件包

C 中每个 block 复制一个文件 block

java - 如何等待并锁定文件