Java把一个大的文本文件拆分成几个小的文件

                                                         Java把一个大的文本文件拆分成几个小的文件

 一、背景

         本地调用线上服务运行了一个程序,运行完成后,日志文件644MB,由于日志中没有统计数据的代码,所以想用日志文件统计一个运行的结果。但是发现:用Notepad++打不开日志文件,原因是文件太大。所以才想到用程序实现

        拆分的粒度:每个拆分后的小文件在100MB左右。

二、java代码

       1. 由于不知道日志文件有多少行,所以先运行一下代码,得到日志文件的行数        

import java.io.*;

/**
 * Created by on 2017/12/8.
 */
public class BeforeBreakFile {

    public static void main(String args[]) {
        try {
            FileReader read = new FileReader("D:/text.log");
            BufferedReader br = new BufferedReader(read);
            String row;

            int rownum = 1;
            while ((row = br.readLine()) != null) {
                rownum ++;
            }
            System.out.println("rownum="+rownum);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
得到日志的行数是:

    

2.得到的总行数是3249276,除以7得到大约464183

   

import java.io.*;

/**
 * Created by  on 2017/12/8.
 */
public class BreakFile {

    public static void main(String args[]) {
        try {
            FileReader read = new FileReader("D:/text.log");
            BufferedReader br = new BufferedReader(read);
            String row;

            int rownum = 1;

            int fileNo = 1;
            FileWriter fw = new FileWriter("D:/text"+fileNo +".txt");
            while ((row = br.readLine()) != null) {
                rownum ++;
                fw.append(row + "\r\n");

                if((rownum / 464183) > (fileNo - 1)){
                    fw.close();
                    fileNo ++ ;
                    fw = new FileWriter("D:/text"+fileNo +".txt");
                }
            }
            fw.close();
            System.out.println("rownum="+rownum+";fileNo="+fileNo);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

运行的结果是:

    

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值