使用java.io.RandomAccessFile类实现大型文本日志切割

原创 2018年04月16日 15:18:54

分析一些后台日志是对问题定位很好的方法,但是有些日志比较大,使用问题编辑器打开也比较慢,同时一个人去看日志也比较慢,通过日志切割,可并发多人同时排查问题等。
代码如下:

package fileExtract;

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;

public class Main {

    static String path = "D:\\Users\\workspace\\Test\\fileSplit\\fileExtract\\file\\";
    static void split() throws IOException {
        File sourceFile = new File(path+"log.txt");
        System.out.println(sourceFile.exists());
        int numberOfPieces = 10;        //默认文件切割的数量
        long fileLength = sourceFile.length() / numberOfPieces;        //分一下每一个小文件的大小
        byte[] b = new byte[1024];       
        RandomAccessFile raf1 = new RandomAccessFile(sourceFile, "r");
        int len = -1;
        for(int i = 0; i < numberOfPieces; i++) {
            String name = path+"log_"  + (i+1)+".txt";
            File file = new File(name);
            file.createNewFile();
            RandomAccessFile raf2 = new RandomAccessFile(file, "rw");
            while((len = raf1.read(b)) != -1) {
                raf2.write(b, 0, len);        
                if(raf2.length() > fileLength)        //如果太大了就不在这个子文件写了 换下一个
                    break;
            }
            raf2.close();
        }
        raf1.close();
    }

    static void merge() throws IOException {
        File[] files = new File[10];
        String name = "log_";
        File file = new File(path+"log.txt");
        file.createNewFile();
        RandomAccessFile in = new RandomAccessFile(file, "rw");
        in.setLength(0);
        in.seek(0);
        byte[] bytes = new byte[1024];
        int len = -1;
        for(int i = 0; i < files.length; i++) {
            files[i] = new File(path+name + (i + 1)+".txt");
            System.out.println(files[i].exists());
            RandomAccessFile out = new RandomAccessFile(files[i], "rw");
            while((len = out.read(bytes)) != -1) {
                in.write(bytes, 0, len);
            }
            out.close();
        }
        in.close();
    }

        public static void main(String[] args) throws IOException {
//            split();
            merge();
        }
    }

运行成功即可!

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/uniquewonderq/article/details/79961072

Linux切割命令split ,可以切割日志文件,文本文件

文件切割,很有用
  • longxibendi
  • longxibendi
  • 2011-05-06 14:22:00
  • 11912

大文本数据文件分割工具

  • 2008年04月21日 22:42
  • 15KB
  • 下载

大日志文件分割

背景: 因一些应用程序产生的日志过大导致磁盘不足,比如lsyncd服务的日志文件,rsyncd服务的日志文件,tomcat的日志输出文件,nginx的日志文件等等; 解决方案:...
  • weiguang1017
  • weiguang1017
  • 2016-12-01 12:37:35
  • 484

RandomAccessFile的用法

  • 2008年01月08日 23:48
  • 5KB
  • 下载

Nginx日志切割之Logrotate篇

Nginx日志切割之Logrotate篇知识管理部 孙磊      Logrotate是Linux下一款日志管理工具,可用于日志文件的转储(即删除旧日志文件,创建新日志文件)。可以根据日志大小或...
  • forthemyth
  • forthemyth
  • 2015-03-04 17:00:27
  • 8583

Apache访问日志切割和自定义格式

十周四次课(12月21日) 11.22 访问日志不记录静态文件 11.23 访问日志切割 11.24 静态元素过期时间扩展 apache日志记录代理IP以及真实客户端IP http://ask.a...
  • lovektm
  • lovektm
  • 2017-12-21 22:12:52
  • 49

云线Txt文本小说日志分割合并器

  • 2016年09月22日 15:36
  • 678KB
  • 下载

使用cronolog按日期分割日志

cronolog cronolog是一个简单的过滤程序从标准输入读取日志文件条目,每个条目写入到输出文件指定一个文件名模板和当前的日期和时间。当扩大的文件名更改,关闭当前文件,并打开一个新的。 cro...
  • beyondlpf
  • beyondlpf
  • 2014-11-27 15:45:37
  • 3562

shell脚本对apache日志分割并统计保存到数据库

apache的日志主要是access_log和error_log,定时有效的将日志进行分割和统计能够减少access_log的大小以及拿到对自己的有用的信息。 一、目的 对access_log进行分...
  • qq_20441521
  • qq_20441521
  • 2016-12-05 20:23:13
  • 753

logrotate切割nginx日志

[TOP]1 链接个人博客: alex-my.xyzCSDN: blog.csdn.net/alex_my2 配置 使用系统自带的logrorate来切个nginx日志,位于/usr/sbin/log...
  • alex_my
  • alex_my
  • 2017-06-27 10:11:05
  • 327
收藏助手
不良信息举报
您举报文章:使用java.io.RandomAccessFile类实现大型文本日志切割
举报原因:
原因补充:

(最多只允许输入30个字)