在java中通过保持行跟踪来读取文件

在java中通过保持行跟踪来读取文件,java,jsp,servlets,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) //

我让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.
它需要一些额外的代码吗?或者还有其他类似的活动吗?

来自:

但是请注意,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 
File File=new文件(“D:\\graph\\temp.log”);
FileReader fr=新的FileReader(文件);
LineNumberReader lineReader=新的LineNumberReader(fr);
//跳过你不需要的行
while(lineReader.getLineNumber()
您看过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));
RandomAccessFile raf=新的RandomAccessFile(文件名,“r”);
字节[]cBuf=新字节[1024];
长计数=偏移量;
raf.搜索(偏移);
长线计数=0l;
while(true){
int lineCOunt=raf.read(cBuf);
计数+=行计数;

if(linecountcount)count来自何处?您是否试图在servlet、会话、客户端中存储状态?我在java文件中有静态变量(由servlet调用)因为这是演示应用程序,这里的会话类型不可用。建议:不要在Java Web应用程序中使用静态变量,即使在演示中也不要使用,除了常量(如
static final int A_CONSTANT=9001
).好的……有其他选择吗?或者我必须开发我自己的逻辑来做同样的事情。@chetan-我会尝试在while循环中调用readLine,直到getLineNumber>=count。一旦跳过不需要的行,就可以开始处理输入。我在10分钟前从未听说过LineNumber Reader……我正在阅读文档从JDK1开始就有了。1@Ravinder-我的观点是,我以前从未使用过LineNumberReader,但你所要做的就是阅读文档。文档的第五句解释了OP的问题。再阅读几行文档可以建议如何解决这个问题。我回答的第一行包括确切的链接y你刚刚列出了,所以…嗯,谢谢;)@jahroy我找到你了。我刚提出,它自发布以来就在那里。