如何读取java中特定行号上下的行?

时间:2012-01-27 11:51:44

标签: java file-io

我需要解析一个txt格式的日志文件。

我需要匹配String并读取匹配的String的上下行。

我需要做类似grep -A 30 -B 50 'hello'的事情。

如果您有任何其他建议,欢迎您。

3 个答案:

答案 0 :(得分:1)

逐行读取文件,并匹配您的字符串(regexp或String.indexOf(“”))。将前n行保留在内存中,以便在匹配字符串时可以打印它们。使用BuffereReader.readLine()逐行读取文件(请注意,使用BufferedReader实际上更复杂,因为您无法跳回)。 或者更灵活RandomAccessFile。使用此方法,您可以标记您的位置,打印下m行,然后跳回以继续搜索您离开的位置。

答案 1 :(得分:1)

伪代码:

initialize a Queue
for each line
    if line matches regex
        read/show lines from queue;
        read/show next lines;
    else {
        if queue size > 30
             queue.remove() // removes head of the queue
        add this line to queue;
    }

您可以使用BufferedReader逐行读取文件,Pattern根据正则表达式检查行,并使用Queue存储以前的行。

答案 2 :(得分:0)

您可以使用以下代码(使用java 5 api java.util.Scanner):

    Scanner scanner = new Scanner(new File("YourFilePath"));
    String prev = null;
    String current;
    while (scanner.hasNextLine())
    {
        current = scanner.nextLine();
        if (current.contains("YourRegEx"))
            break;
        else
            prev = current;
    }
    String next = scanner.nextLine();

您可能希望添加prev非空的其他检查,并在scanner.hasNextLine()之前调用String next = scanner.nextLine()