Java快速读取日志文件的最后一行数据,非常大。

包裹?cn . com . songjy . test . io;?

进口?Java . io . file not found exception;?

进口?Java . io . io exception;?

进口?Java . io . random access file;?

/**?

*?从最后一行开始读?

*/?

公共?班级?FromEndRF?{?

/**?

*?

*?@param?文件名?目标文件?

*?@param?字符集?目标文件的编码格式是什么?

*/?

公共?静电?作废?读(字符串?文件名,?字符串?字符集)?{?

RandomAccessFile?rf?=?null?

试试?{?

rf?=?新的?RandomAccessFile(文件名,“r”);?

龙?莱恩。=?rf.length()。?

龙?开始?=?RF . getfile pointer();?

龙?nextend?=?开始?+?莱恩。-?1;?

字符串?线;?

RF . seek(next end);?

int?c?=?-1;?

什么时候?(nextend?& gt?开始)?{?

c?=?RF . read();?

如果?(c?==?\n '?||?c?==?\r ')?{?

线?=?RF . readline();?

如果?(线?!=?null)?{?

System.out.println(新?字符串(行?

。getBytes("ISO-8859-1 "),?charset));?

}?不然呢?{?

system . out . println(line);?

}?

next end-;?

}?

next end-;?

RF . seek(next end);?

如果?(nextend?==?0)?{//?当文件指针回到文件开头时,输出第一行。

//?system . out . println(RF . readline());?

System.out.println(新?String(rf.readLine()。getBytes(?

" ISO-8859-1 "),?charset));?

}?

}?

}?接住?(FileNotFoundException?e)?{?

e . printstacktrace();?

}?接住?(IOException?e)?{?

e . printstacktrace();?

}?终于?{?

试试?{?

如果?(rf?!=?null)?

RF . close();?

}?接住?(IOException?e)?{?

e . printstacktrace();?

}?

}?

}?

公共?静电?作废?main(字符串?args[])?{?

read("mynewfile.txt ",“UTF-8”);?

}?

}描述:以上是倒读文件的案例。你可以根据这个案例和你的实际需求来设计你自己的代码。此外,如果是web应用程序或其他持久性应用程序,可以通过使用单独的线程或在内存中存储读取位置来尝试保持文件打开。