读取当前正在编写的java中的日志文件

时间:2013-06-20 15:56:43

标签: java java-io

我有一个程序运行,它将日志写入文件,我想逐行读取它。我尝试使用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方法,因为我确信这是一些标准问题。我在某处读到了Trailer类。但无法测试。

1 个答案:

答案 0 :(得分:0)

来自How do you continuously read a file in Java?

The trick is to use a java.io.RandomAccessFile, and periodically check if the file length is greater that your current file position. If it is, then you read the data. When you hit the length, you wait. wash, rinse, repeat.

你需要处理互斥问题(一次只能读/写一件事) 或者您的数据可能已损坏)

如果你最终使用BufferedReader,它一次读取一行。如果你想读入多个,你可以使用这样的循环:

BufferedReader br = new BufferedReader(new FileReader("file.txt"));
while ((sCurrentLine = br.readLine()) != null) 
{
    System.out.println(sCurrentLine);
}

这可能导致IOException fyi,所以将它包装在try / catch中,或让你的方法抛出一个并在其他地方处理它。

来源:http://www.mkyong.com/java/how-to-read-file-from-java-bufferedreader-example/