Java—在另一个进程更新文件时读取该文件
可能重复:Java—在另一个进程更新文件时读取该文件,java,file,io,Java,File,Io,可能重复: 我有一个程序(陷阱接收器),它在文件的末尾附加一个字符串。这个程序基本上记录它所做的一切 我想让我的程序读取这个日志文件。这样做我会遇到什么问题?最有效的方法是什么。在另一个进程更新文件时读取该文件。假设此记录器与大多数记录器一样,不只是附加任何类型的字符串,而是添加整行 您可以简单地使用bufferedReader并在没有任何内容时等待: BufferedReader br = new BufferedReader(new FileReader("path")); String
我有一个程序(陷阱接收器),它在文件的末尾附加一个字符串。这个程序基本上记录它所做的一切
我想让我的程序读取这个日志文件。这样做我会遇到什么问题?最有效的方法是什么。在另一个进程更新文件时读取该文件。假设此记录器与大多数记录器一样,不只是附加任何类型的字符串,而是添加整行 您可以简单地使用bufferedReader并在没有任何内容时等待:
BufferedReader br = new BufferedReader(new FileReader("path"));
String line;
while (true) {
line = br.readLine();
if (line != null) {
// do something
} else {
Thread.sleep(DELAY); // DELAY could be 100 (ms) for example
}
}
当然,如果应用程序还有其他任务要完成,则必须在单独的线程中执行此操作
如果您想避免拉取,在非常罕见的日志记录的情况下,您可以使用,但我从未在简单的文件上尝试过,我不确定它是否总是可靠的。假设此日志记录程序与大多数日志记录程序一样,不只是附加任何类型的字符串,而是添加整行 您可以简单地使用bufferedReader并在没有任何内容时等待:
BufferedReader br = new BufferedReader(new FileReader("path"));
String line;
while (true) {
line = br.readLine();
if (line != null) {
// do something
} else {
Thread.sleep(DELAY); // DELAY could be 100 (ms) for example
}
}
当然,如果应用程序还有其他任务要完成,则必须在单独的线程中执行此操作
如果你想避免拉扯,在非常罕见的伐木情况下,你可以使用a,但我从未在简单的文件上尝试过,我不确定它是否总是可靠的。-1对于重复:你可以在这里找到答案:请在发布之前检查问题是否已经存在。-1对于重复:你可以在这里找到答案:请在发布之前检查问题是否已经存在它。非常感谢你……我在谷歌上做了一些研究,发现了一种叫做互斥的东西,我相信它就像文件锁一样。这种方法会绕过这个问题吗?互斥是另一回事:它们用于同步不同的线程。我不认为互斥在这里有用。我明白了。非常感谢。此代码将用于最有可能全天候运行的服务器。希望这段代码不会崩溃哈哈。我会让你知道事情的进展。再次感谢。不要忘记捕获IO异常,如果需要,请重新打开读卡器。另一个细节:大多数24/7日志记录者每天都会更改文件(或者当文件太大时),因此您可能需要查看目录,而不仅仅是文件。非常感谢。我会尽我所能写出最好的代码。非常感谢你……我在谷歌上做了一些研究,发现了一种叫做互斥的东西,我相信它就像文件锁一样。这种方法会绕过这个问题吗?互斥是另一回事:它们用于同步不同的线程。我不认为互斥在这里有用。我明白了。非常感谢。此代码将用于最有可能全天候运行的服务器。希望这段代码不会崩溃哈哈。我会让你知道事情的进展。再次感谢。不要忘记捕获IO异常,如果需要,请重新打开读卡器。另一个细节:大多数24/7日志记录者每天都会更改文件(或者当文件太大时),因此您可能需要查看目录,而不仅仅是文件。非常感谢。我会尽我所能写出最好的代码。