本文主要是介绍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(); -
} -
} -
}
运行的结果是:
这篇关于Java把一个大的文本文件拆分成几个小的文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!