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

供稿:hz-xin.com     日期:2024-05-04
java快速读取文本文件最后一行数据,文本文件非常大

用RandomAccessFile
用seek(long pos) 跳到最后一个字节,然后一个字节一个字节往回查,查到换行符为止。

1,我印象里没有循环写native_stderr.log日志的设置2,文件大小的限制是Linux操作系统决定的,察看ulimit的输出 调试WAS的时候把如下几个写JVM日志的参数打开了.关闭即可server->Java and Process Management->Process Definition->Java Virtual Machine->Verbose class loading Verbose garbage collectionVerbose JNI

package cn.com.songjy.test.io;  
  
import java.io.FileNotFoundException;  
import java.io.IOException;  
import java.io.RandomAccessFile;  
  
/** 
 * 从最后一行开始读取 
 */  
public class FromEndRF {  
  
    /** 
     *  
     * @param filename 目标文件 
     * @param charset 目标文件的编码格式 
     */  
    public static void read(String filename, String charset) {  
  
        RandomAccessFile rf = null;  
        try {  
            rf = new RandomAccessFile(filename, "r");  
            long len = rf.length();  
            long start = rf.getFilePointer();  
            long nextend = start + len - 1;  
            String line;  
            rf.seek(nextend);  
            int c = -1;  
            while (nextend > start) {  
                c = rf.read();  
                if (c == '
' || c == '') {  
                    line = rf.readLine();  
                    if (line != null) {  
                        System.out.println(new String(line  
                                .getBytes("ISO-8859-1"), charset));  
                    } else {  
                        System.out.println(line);  
                    }  
                    nextend--;  
                }  
                nextend--;  
                rf.seek(nextend);  
                if (nextend == 0) {// 当文件指针退至文件开始处,输出第一行  
                    // System.out.println(rf.readLine());  
                    System.out.println(new String(rf.readLine().getBytes(  
                            "ISO-8859-1"), charset));  
                }  
            }  
        } catch (FileNotFoundException e) {  
            e.printStackTrace();  
        } catch (IOException e) {  
            e.printStackTrace();  
        } finally {  
            try {  
                if (rf != null)  
                    rf.close();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
    }  
  
    public static void main(String args[]) {  
        read("mynewfile.txt", "UTF-8");  
    }  
}

说明:以上是一个倒着读取文件的案例,可以根据此案例,结合自己的实际需求来设计自己的代码。另外,如果是web应用或其它持续型应用,可以尝试利用单独线程保持文件打开或将读取位置存储在内存中。



package zipfile;import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;public class FromEndRF {
public static void main(String args[]){
RandomAccessFile rf=null;
try {
rf=new RandomAccessFile("H:/JSP/tech/login.jsp","r");
long len=rf.length();
long start=rf.getFilePointer();
long nextend=start+len-1;
String line;
rf.seek(nextend);
int c=-1;
while(nextend>start){
c=rf.read();
if(c=='\n'||c=='\r'){
line=rf.readLine();
if(line==null){//处理文件末尾是空行这种情况
nextend--;
rf.seek(nextend);
continue;}
System.out.println(line);
nextend--;
}
nextend--;
rf.seek(nextend);
if(nextend==0){//当文件指针退至文件开始处,输出第一行
System.out.println(rf.readLine());
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
finally{
try {
rf.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
这是读取文件的最后一行,然后倒着往上一行一行输出,应该看的懂吧?

开AVA占CPU使用率100%,CPU温度升高。
答:在注册表中的情况最复杂,通过regedit命令打开注册表编辑器,在点击至:“HKEY-LOCAL-MACHINE\Software\Microsoft\Windows\CurrentVersion\Run”目录下,查看键值中有没有自己不熟悉的自动启动文件,扩展名为EXE,这里切记:有的“木马”程序生成的...

java怎么读取上传的excel文件
答:对于合并单元格的以最左,最上的单元格的坐标为准。如下图中t.xls,一班名单(0,0),陈茵(1,2),陈开先(1,6)。4.java代码对t.xls的读取 ava操作Excel的一种方法:在开源世界中,有两套比较有影响的API可供使用...

我玩AVA后C盘越来越小,是不是AVA有啥文件在C盘啊,我安在F盘的,是啥...
答:在电脑屏幕的左下角按“开始→程序→附件→记事本”,把下面的文字复制进去(黑色部分),点“另存为”,路径选“桌面”,保存类型为“所有文件”,文件名为“清除系统LJ.bat”,就完成了。记住后缀名一定要是.bat,ok!

tomcat log文件错误
答:一般这种情况就是打开的数据库连接过多而没有关闭才导致数据库连接数到最大化了才会出现这种情况。

我家的AVA下好后 提取战地之王客户端资源 到了100%后就没了。怎么回事...
答:MDB,“COUNT.ASP”可以把最后的十个文件或怀疑的文件删除到回收站中,再启动IIS,看看问题是否再次出现。我们相信,经过仔细的查找,肯定可以找到这个让您操心了一段时间的文件。找到这个文件,你可以删除它,或下载ACCESS2000...

java读取pdf文件的时候出现异常
答:所需要的包:PDFBox-0.7.3.zip 解压文件夹下:external下的全部,lib文件下的PDFBox-0.7.3.jar 注意:只能读取文本格式的pdf,如果pdf为图片格式的,本程序不能使用!程序介绍:本程序将文本格式pdf中的文字读取出来,...

我一玩游戏电脑就蓝屏怎么解决?
答:8. 最后一次正确配置 一般情况下,蓝屏都出现于更新了硬件驱动或新加硬件并安装其驱动后,这时windows 2000/XP提供的“最后一次正确配置”就是解决蓝屏的快捷方式,重启系统,在出现启动菜单时按下F8键就会出现高级启动选项菜单,接着选择“...

java学习作为一名java初学者,如何快速学习j
答:JAVA快速入门的方法:1、时刻提醒自己Java是一种OOP语言工具,而不仅仅是编码,只有这样才能总体把握和运用Java。2、在学习的过程中,最好能够【了解Java】的底层机制,而不是仅仅停留在表层,不是抄书上的例子运行出结果就...

电脑开机显示DLLC:\Windows\System32\2052\msiava.dll无此镜像驱动程 ...
答:14.已经被破坏的.LOG日志文件;15.访问历史文件夹错误;16.不合适的或损坏的动态链接库文件;17.机器感染了病毒;18.损坏的或者不正确版本的msinfo32.exe文件;19.磁盘空间不足。二、行之有效的解决方案 知道了哪些情况可能...

自学Java 怎么入门?
答:在Java基础板块中有6个子模块的学习:基础语法,可帮助你建立基本的编程逻辑思维;面向对象,以对象方式去编写优美的Java程序;集合,后期开发中存储数据必备技术;IO,对磁盘文件进行读取和写入基础操作;多线程与并发,提高程序效率;异常,编写代码...