3

我有一个正在运行的程序,它将日志写入文件,我想逐行读取它。我尝试使用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(),但它已被弃用,并且根据它使用BufferedReader 说的 java 文档。但是reader.readLine()它并没有像我预期的那样工作。

此外,还有什么其他更好的 java 方法可以做到这一点,因为我确信这是一些标准问题。我在某处读到了预告片类。但无法测试。

4

1 回答 1

0

你如何在 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/

于 2013-06-20T16:08:21.327 回答