问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-04-24 01:14

我来回答

2个回答

热心网友 时间:2023-11-08 18:31

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 == '\n' || c == '\r') {  
                    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应用或其它持续型应用,可以尝试利用单独线程保持文件打开或将读取位置存储在内存中。

热心网友 时间:2023-11-08 18:32

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();
}
}
}
}
这是读取文件的最后一行,然后倒着往上一行一行输出,应该看的懂吧?
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
15份的摘抄,要短的我是写作业的,差不多一份要一张纸 肯定会给高分_百度... 补牙前怎么样杀神经? ...我妈让我把牙堵上,想知道是怎么堵?要是杀神经,具体流程是什么样的... 汽车电瓶断电开关断正极还是负极 汽车电瓶断电开关断正极吗 为什么汽车电瓶断电后要断开负极 亳州市教师资格证考哪些科目 请问在观澜坐哪路公交车去深圳大学 陈旧隙腔性脑梗塞能喝酒吗?要喝的话多少为好?谢谢……! 男女朋友分手,怎样消除房产证上女方的名字 ...加了女方的名字 现在女方要提出分手 这房子该怎么处理? java项目的后台管理中如何使用log4j来实现日志操作管理 如何在JAVA中使用日志文件 java日志管理怎么获取到方法耗时 He told me he could not go to sleep. That is what he _______. A said meBtalked to me C told to me java服务器日志保存到本地 eminem的 go to sleep 的歌词中文翻译 go to sleep Eminem 中文歌词 java日志分析 java定时读取日志文件 go to sleep 歌词的中文翻译 怎么用就java 做日志分析啊 如何取消一个goroutine 的执行 java程序中实现系统日志功能怎么做?就是用来记录使用系统的操作记录的那... go to bed和go to sleep的区别 java的多线程在golang中是如何体现的? 如何优雅地等待所有的goroutine退出 go语言 sleep 10秒 怎么实现 在go语言中select关键字怎么用? 详解Python中的协程,为什么说它的底层是生成器? sleep是什么意思 Java多打日志信息,会不会影响性能 Java日志??? 阿里云日志服务 怎么显示java异常日志信息 为什么我看快手对方叫视频我看不见 java怎么解析syslog服务器的日志 java的日志输出到哪里了 安在墙上的插座坏了,怎么才能拆下来维修呢? 青椒、红椒、线椒这些辣椒有什么分别,如何使用? 插座怎么拆卸图解 青椒和红椒有什么区别啊? 红椒,青椒,黄椒哪种更有好的功能? 红椒是否是青椒成熟后的产物 picc人保财险,财务岗位社会招聘进去是签订什么合同?待遇怎么样?_百度问一问 青椒红椒属于辛辣食物吗 谁知道中国人民财产保险股份有限公司招聘面试什么内容啊? 怎样拆卸五孔插座 青辣椒和红辣椒是一个品种吗? picc人保财险,进PICC是不是很难有编制的呢?只要是省公司发工资的就算是在编员工吧! 怎么拆安在墙上的插座?我橇了半天也橇不下那个框 PICC人保招聘是骗人的吗?