[心缘地方]同学录
首页 | 功能说明 | 站长通知 | 最近更新 | 编码查看转换 | 代码下载 | 常见问题及讨论 | 《深入解析ASP核心技术》 | 王小鸭自动发工资条VBA版
登录系统:用户名: 密码: 如果要讨论问题,请先注册。

[备忘]使用apache的common包,实现文件的tail操作

上一篇:[备忘]一个dubbo测试工具
下一篇:[备忘]一例win10内存不停涨的分析

添加日期:2022/3/10 13:47:17 快速返回   返回列表 阅读408次
想实现tail功能,搜了一堆代码,好复杂。
想着apache是否有现成的,一搜真有,
使用好简单啊,哈哈


package com.why;

import java.io.File;
import java.nio.charset.Charset;
import java.util.Timer;
import java.util.TimerTask;

import org.apache.commons.io.input.Tailer;
import org.apache.commons.io.input.TailerListener;
import org.apache.commons.io.input.TailerListenerAdapter;

public class MyTail {

    public static void main(String[] args) {

        String path = "D:\\xxxx\\log\\yyyy.log";

        // 监听
        TailerListener listener = new TailerListenerAdapter() {

            StringBuilder sb = new StringBuilder();

            //每一行新内容会回调它
            @Override
            public void handle(final String line) {
                sb.append(line).append("\r\n嘎");
            }

            //读到末尾会回调它
            public void endOfFileReached() {
                System.out.println("---------------");
                System.out.println(sb.toString());
                sb.setLength(0);
            }
        };

        // 创建Tailer,新线程执行
        // 1000是读取间隔毫秒数
        // true,从文件末尾开始,false从开头开始,会把文件内容都打印出来
        // false,是否每次reOpen文件
        // 4096,读文件的bufferSize
        final Tailer tailer = Tailer.create(new File(path), Charset.forName("UTF-8"), listener, 1000, true, false, 4096);

        // 定时器,60秒后,停止tailer
        Timer t = new Timer();
        t.schedule(new TimerTask() {
            @Override
            public void run() {
                tailer.stop();
                System.out.println("tailer end");
            }
        }, 60 * 1000);
    }

}



Tailer大概原理就是,查看文件大小,有变化,就从上次位置开始读取,
每行触发一次监听者的handle方法
读完触发一次监听者的endOfFileReached方法。

我这里,把每次读取内容拼起来了,打算发到服务端,方便远程tail日志。
然后跑十分钟,就自动关掉tailer。
想看再发指令过来,再开。
 

评论 COMMENTS
没有评论 No Comments.

添加评论 Add new comment.
昵称 Name:
评论内容 Comment:
验证码(不区分大小写)
Validation Code:
(not case sensitive)
看不清?点这里换一张!(Change it here!)
 
评论由管理员查看后才能显示。the comment will be showed after it is checked by admin.
CopyRight © 心缘地方 2005-2999. All Rights Reserved