【发布时间】:2013-06-20 15:56:43
【问题描述】:
我正在运行一个将日志写入文件的程序,我想逐行读取它。我尝试使用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 文档,它使用 BufferedReader 说。但是reader.readLine() 并没有像我预期的那样工作。
另外,还有什么其他更好的 java 方法可以做到这一点,因为我确信这是一些标准问题。我在某处读到了预告片类。但无法测试。
【问题讨论】:
-
什么没有按预期工作?
-
当我使用 reader.readLine() 时,它只读取第一行
-
不要使用
ävailable()方法,没用。 InputStreams 不会读取持续更新的文件。一旦到达流的末尾,即使底层文件更新,它们也将停止返回结果。 -
一直读第一行,还是只读一次?
-
如果要处理不断更新的数据,则需要使用 FileChannel。