2

ある間隔でjsp呼び出しサーブレットのログファイルを読み取るサーブレットがあります。サーブレットに機能を追加して、前回の読み取りの最後の行の次の行からファイルを読み取るようにします。

次のコードがありますが、機能しません

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()によって返される値のみを変更します。

最初から始めて、getLineNumber()がcountより大きくなるまで、ループでreadLineを呼び出す必要があるように思えます。

このようなもの:

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を見たことがありますか。読み取ったバイト数を保持する場合。フォローインコードよりも役立ちます。

    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 に答える