java如何通过读取bufferedreader获得前一行的可变数量
我正在使用BufferedReader逐行读取日志文件。如果一条线与一个精确的图案匹配,我也会获得前面的线。此行号由用户输入。例如,模式是“错误”和行号3,所以我将存储错误行和前3行
FileInputStream fInStream = new FileInputStream(fileBase);
br = new BufferedReader(new InputStreamReader(fInStream));
while ((line = br.readLine()) != null) {
if(line.contains("ERROR")){
//here, i should write previous 3 lines and then ERROR line
bw.write(line + "\r\n");
}
}
如有任何建议,将不胜感激
# 1 楼答案
您必须保存最后n行的读数,以便在遇到错误行时始终显示它们
困难的部分是创建一个数据结构,以便为您跟踪最后n行
也许你可以使用类似于这个问题的答案Looking for a circular fixed size array-based deque
所以你的代码是这样的
# 2 楼答案
正如我在评论中所说,你可以跟踪用户在每一步中要求的最后几行。因此,在阅读了日志中不包含“错误”的一行之后,你会将其添加到你的记忆行列表中,如果此时记忆行列表的长度超过了用户要求的行数,则扔掉其中最早的条目
因此,在代码中,它看起来是这样的(您可以在数据结构中使用
LinkedList
):