正在用java读取当前正在编写的日志文件
我有一个程序正在运行,它将日志写入一个文件,我想逐行读取它。我尝试使用正在用java读取当前正在编写的日志文件,java,java-io,Java,Java Io,我有一个程序正在运行,它将日志写入一个文件,我想逐行读取它。我尝试使用InputStream,尤其是DataInputStream,使用它的可用方法。但是它没有readLine方法,它已被弃用,建议将其包装在BufferedReader中以使用readLine。但是当我使用BufferedReader时,它不会读取所有的行,它会以某种方式停止读取一行 public void read(DataInputStream ins) { try { while(t
InputStream
,尤其是DataInputStream
,使用它的可用方法。但是它没有readLine
方法,它已被弃用,建议将其包装在BufferedReader
中以使用readLine
。但是当我使用BufferedReader
时,它不会读取所有的行,它会以某种方式停止读取一行
public void read(DataInputStream ins) {
try {
while(true) {
if(ins.available() > 0) {
//BufferedReader reader = new BufferedReader(new InputStreamReader(ins));
//System.out.println(reader.readLine());
System.out.println(ins.readLine());
}
else {
Thread.sleep(200);
}
}
}
catch(Exception e) {
e.printStackTrace();
}
}
因此,该代码与ins.readLine()
一起工作,但它已被弃用,而且根据java文档,它说使用BufferedReade
r。但是对于reader.readLine()
来说,它并没有像我预期的那样工作
另外,还有什么更好的java方法可以做到这一点,因为我确信这是一些标准问题。我在什么地方读到关于拖车课的消息。但无法测试这一点 来自
诀窍是使用java.io.RandomAccessFile,并定期检查文件长度是否大于当前文件位置。如果是,则读取数据。当你到达终点时,你要等待。清洗、漂洗、重复。
你需要处理互斥问题(一次只能读/写一件东西)
或者您的数据可能已损坏)
如果最终使用BufferedReader,它一次只能读取一行。如果要读取多个,可以使用如下循环:
BufferedReader br = new BufferedReader(new FileReader("file.txt"));
while ((sCurrentLine = br.readLine()) != null)
{
System.out.println(sCurrentLine);
}
这可能会导致IOException供参考,所以将其包装在try/catch中,或者让您的方法抛出一个IOException,然后在其他地方处理它
来源:什么没有按预期工作?当我使用reader.readLine()时,它只读取第一行。不要使用
äavailable()
方法,它是无用的。InputStreams不会读取持续更新的文件。一旦到达流的末尾,即使基础文件更新,它们也会停止返回结果。它会继续读取第一行,或者只读取一次?如果要处理不断更新的数据,则需要使用FileChannel。这并不能解决OP的问题。标准输入流/读取器不能用于读取不断更新的文件。@jtahlborn-mmm,好的,让我看看是否能给出更好的答案。它确实解决了使用BufferedReader的文档点,所以我将离开它,我想知道如果reader当前没有任何行要读取,会发生什么,但这并不意味着文件已关闭。@jtahlborn好的,应该这样做了,所以现在您的答案只是重复其他人的答案。