尝试逐行读取日志文件(在 Java 中)。此日志文件正在由另一个进程(非 java 程序)同时写入。
我有两种方法 -
- BufferedReader (BufferedReader br = new BufferedReader(new FileReader(logFile));)
- 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/