Java实时读取日志文件

过去的,未来的
2020-04-05 / 0 评论 / 0 点赞 / 1,833 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2020-04-05,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

RandomAccessFile类中seek方法可以从指定位置读取文件,可以用来实现文件实时读取。

一、实现步骤:

  • 1.首先,要有服务器上日志文件的路径。
String url="/logpath/logFile.log";
  • 2.根据路径生成文件对象。
File file = new File(url);
  • 3.判断文件对象的合理性:
file.isFile()==true,file.exists()==true;
  • 4.将文件赋值为可读权限:
RandomAccessFile randomAccessFile = new RandomAccessFile(file,"r");
  • 5.将文件的指针移动到开始字节:
randomAccessFile.seek(startPointer);
  • 6.读取日志内容:
randomAccessFile.readLine();

二、代码实现

private long lastTimeFileSize = 0;  //上次文件大小
    /**
     * 实时输出日志信息
     * @param logFile 日志文件
     * @throws IOException
     */
    public void realtimeShowLog(File logFile) throws IOException{
        //指定文件可读可写
        final RandomAccessFile randomFile = new RandomAccessFile(logFile,"r");
        //启动一个线程每10秒钟读取新增的日志信息
        ScheduledExecutorService exec = Executors.newScheduledThreadPool(1);
        exec.scheduleWithFixedDelay(new Runnable(){
            public void run() {
                try {
                    //获得变化部分的
                    randomFile.seek(lastTimeFileSize);
                    String tmp = "";
                    while( (tmp = randomFile.readLine())!= null) {
                        System.out.println(new String(tmp.getBytes("ISO8859-1")));
                    }
                    lastTimeFileSize = randomFile.length();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }, 0, 1, TimeUnit.SECONDS);
    }

    public static void main(String[] args) throws Exception {
        LogView view = new LogView();
        final File tmpLogFile = new File("d:/123.txt");
        view.realtimeShowLog(tmpLogFile);
    }

三、测试

运行main方法,在文件中追加文本,就可以看到控制台也在打印数据。

参考:https://www.cnblogs.com/en-heng/p/3926708.html

0

评论区