尝试逐行读取日志文件(使用Java)。此日志文件由另一个进程(非Java程序)同时写入。
我有两种方法 -
这两种方法都会导致文件被锁定,直到我在BufferedReader / RandomAccessFile对象上调用'close'方法?
是否有其他方法(Java)以这样的方式读取文件:文件没有被其他进程/程序锁定/阻止?
PS - 在我的所有搜索中,我遇到了这个问题的多个答案/解决方案(新旧)。我只想就这个问题寻求澄清/结束。
答案 0 :(得分:4)
看看这个: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
答案 1 :(得分:0)
BufferedReader在性能方面优于RandomAccessFile,但它们都不会锁定文件,除非操作系统对你这样做,在这种情况下关闭文件将释放它。
但是,如果其他人正在写文件,操作系统也可能会完全阻止您阅读该文件。
在另一个进程写入时读取顺序文件并不是一个好的设计。你根本不应该真正阅读日志文件。日志文件适用于人类。您应该使用数据库。