2

我有 servlet 以某个间隔读取我的 jsp 调用 servlet 的日志文件。我想在我的 servlet 中添加功能,以便它从上次读取的最后一行旁边的行读取文件。

我有以下代码,但它不工作

File file = new File("D:\\graph\\temp.log");
FileReader fr = new FileReader(file);
LineNumberReader lnr = new LineNumberReader(fr);\

lnr.setLineNumber(count)  // count is the variable keeping track of number of line  
                             previously read.

是否需要一些额外的代码?还是有其他替代方法可以做同样的事情?

4

2 回答 2

1

文档中

但是请注意, setLineNumber(int) 实际上并没有改变流中的当前位置;它只会更改 getLineNumber() 将返回的值。

在我看来,您必须从头开始并循环调用 readLine,直到 getLineNumber() 大于计数。

像这样的东西:

File file = new File("D:\\graph\\temp.log");
FileReader fr = new FileReader(file);
LineNumberReader lineReader = new LineNumberReader(fr);

// skip the lines you don't need 

while (lineReader.getLineNumber() < count) {
    lineReader.readLine();
}

// begin processing input here 
于 2012-05-26T04:54:10.953 回答
0

你看过RandomAccessFile吗?如果您保持读取的字节数。比followin代码会帮助你。

    RandomAccessFile raf = new RandomAccessFile(fileName,"r");
    byte[] cBuf = new byte[1024];
    long count = offset;
    raf.seek(offset);
    long lineCOunt=0l;
    while(true){
        int lineCOunt  =raf.read(cBuf);
        count +=lineCOunt;
        if(lineCOunt<1024){
            System.out.println((new String(cBuf)).substring(0,i));
            break;
        }
        System.out.println(new String(cBuf));
于 2012-05-26T06:10:03.523 回答