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

Java 读取外部日志文件而不创建文件锁,java,file,filelock,randomaccessfile,Java,File,Filelock,Randomaccessfile,尝试在Java中逐行读取日志文件。另一个进程非java程序正在同时写入此日志文件 我有两种方法- BufferedReader BufferedReader br=新的BufferedReadernew文件ReaderLogFile; RandomAccessFile RandomAccessFile accessFile=新的RandomAccessFilelogFile.getAbsolutePath,r; 在我调用BufferedReader/RandomAccessFile对象上的“cl

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

我有两种方法-

BufferedReader BufferedReader br=新的BufferedReadernew文件ReaderLogFile; RandomAccessFile RandomAccessFile accessFile=新的RandomAccessFilelogFile.getAbsolutePath,r; 在我调用BufferedReader/RandomAccessFile对象上的“close”方法之前,这两种方法是否都会导致文件被锁定

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

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

看看这个:

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

如果共享锁可用,那么java.nio可能允许对锁定行为进行更多的控制:

看看这个:

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


如果共享锁可用,则java.nio可能允许对锁定行为进行更多的控制:

出于性能考虑,BufferedReader比RandomAccessFile更可取,但它们都不会锁定文件,除非操作系统愿意为您锁定,在这种情况下,关闭文件将释放文件

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


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

出于性能考虑,BufferedReader比RandomAccessFile更可取,但它们都不会锁定文件,除非操作系统为您这样做,在这种情况下,关闭文件将释放文件

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


在另一个进程写入顺序文件时读取该文件不是一个好的设计。你根本就不应该阅读日志文件。日志文件是为人类准备的。你应该使用一个数据库。

简洁,但可能有用,也与yea看到的有关。那篇文章给出了很好的选择,但没有明确的答案。另外,它已经2年了。也许java-7有一些新的东西?请简单地参考这个答案,但可能有用,也与yea看到的相关。那篇文章给出了很好的选择,但没有明确的答案。另外,它已经2年了。也许java-7有一些新的功能?请特别参考这个答案:比如说,在Windows中读取独占或无标志以及读取共享模式如何?我之所以选择Windows,是因为common*IX操作系统通常不具备这样的访问模式,即需要为非独占写入文件设置特殊标志。我想这个回答回答了我问题的一部分。如果可能的话,有人可以引用此语句的任何引用-“但是他们都不会锁定文件,除非操作系统为您这样做”。顺便说一句,我知道我不应该搞乱锁定的文件,但我想了解这里更大的问题,那就是在i/O期间锁定Java中的文件。@QuestMonger Windows会锁定您打开以供输出的文件,以便其他人无法读取。除了通过显式NIO锁之外,Java不会锁定任何文件,但我相信它也不会阻止Windows在默认情况下所做的事情?我之所以选择Windows,是因为common*IX操作系统通常不具备这样的访问模式,即需要为非独占写入文件设置特殊标志。我想这个回答回答了我问题的一部分。如果可能的话,有人可以引用此语句的任何引用-“但是他们都不会锁定文件,除非操作系统为您这样做”。顺便说一句,我知道我不应该搞乱锁定的文件,但我想了解这里更大的问题,那就是在i/O期间锁定Java中的文件。@QuestMonger Windows会锁定您打开以供输出的文件,以便其他人无法读取。除了通过显式NIO锁之外,Java不会锁定任何文件,但我相信它也不会阻止Windows默认的操作
读取文件时,标准Java IO是否在Windows上工作?是否尝试共享读取Windows引入了另一种状态:非文件时独占读取\u共享\u读取,那么标准Java IO在Windows上读取文件时是如何工作的呢?是否尝试共享读取