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();
}
}
}
运行的结果是: