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