发布时间:2025-12-09 20:37:23 浏览次数:4
在日常工作中,有时因平台限制或工作需要,需将一个大文件按行或文件大小分割成若干个小文件。本工具是基于行对大文本文件进行切割设计的,如需按文件大小切割,可根据大文件大小结合总行数大体估算下单文件大体行数,进行简单换算。
Maven项目引入
<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version></dependency>JAVA源码 txtSplit
package com.caryeko;import org.apache.commons.io.FileUtils;import java.io.File;import java.io.IOException;import java.util.List;/*** 〈文本文件切割工具〉* 〈在日常工作中,有时因平台限制,需要将一个大文件按行分割成若干个小文件〉** @author caryeko* @Date 2021/7/17*/public class App {public static void main(String[] args) {// 待处理的大文件String fileName = "C:\\Users\\caryeko\\Desktop\\数据清洗\\sql数据切割\\测试数据.sql";// 分割多少个文件int splitFileNum = 6;txtSplit(fileName, splitFileNum);}private static void txtSplit(String fileName, int splitFileNum) {System.out.println(String.format("文档[%s]期望切割为[%d]个小文件开始!", fileName, splitFileNum));try {// 构建大文件对象File file = new File(fileName);// 读取txt/sql文件List fileLines = FileUtils.readLines(file, "UTF-8");// 计算总行数int totalLine = fileLines.size();// 单文件行数=总行数/文件个数int singleFileLine = (int) Math.round((totalLine / splitFileNum) + 0.5);// 循环生成子文件for (int i = 0; i < splitFileNum; i++) {// 分割生成子文件-后缀名 0_xxx 1_xxxFile singleFile = new File(file.getParentFile() + File.separator + i + "_" + file.getName());System.out.println(singleFile.getName());// 一次读入singleFileLine行int start = i * singleFileLine;int end = (i + 1) * singleFileLine;if (end > totalLine) {end = totalLine;}FileUtils.writeLines(singleFile, fileLines.subList(start, end));}} catch (IOException e) {System.out.println(String.format("文档[%s]期望切割为[%d]个小文件发生异常:\n%s", fileName, splitFileNum, e));e.printStackTrace();return;}System.out.println(String.format("文档[%s]期望切割为[%d]个小文件完毕!", fileName, splitFileNum));}}工具推荐[PilotEdit Lite]
平日我们处理的文本文件一般都比较小,用常用的编辑软件大都没啥问题,但如果遇到了超过10MB以上的文件似乎【Notepad++】这类编辑软件就有点不给力了,自己特意去网上搜索了下支持超大文本编辑的软件,还真有一款用起来非常舒适的,她就是[PilotEdit Lite],支持中文界面,交互友好,用起来超赞,Lite是免费社区版本,如需更强大的功能,可付费购买完整版。
官网下载地址:PilotEdit - Edit and Compare Large Files