通过在java中保持线轨来读取文件

时间:2012-05-26 04:42:48

标签: java jsp servlets

我有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.

是否需要一些额外的代码?或者还有其他任何相同的方法吗?

2 个答案:

答案 0 :(得分:1)

来自the documentation

  

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

听起来像你必须从头开始并在循环中调用readLine,直到getLineNumber()大于count。

这样的事情:

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 

答案 1 :(得分:0)

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

    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));