import java.io.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
@Slf4j
public class SegFile {
/**
* 根据需求,直接调用静态方法start来执行操作 参数: rows 为多少行一个文件 int 类型 sourceFilePath 为源文件路径
* String 类型 targetDirectoryPath 为文件分割后存放的目标目录 String 类型
* ---分割后的文件名为源文件+'_'+索引号(从0开始)+扩展名名,例如源文件名为test.txt,则分割后文件名为test_0.txt,以此类推
*/
public static void start(long rows, File sourceFile, File targetFile) {
if (!sourceFile.exists() || rows <= 0 || sourceFile.isDirectory()) {
log.info("源文件不存在或者输入了错误的行数");
return;
}
if (targetFile.exists()) {
if (!targetFile.isDirectory()) {
log.info("目标文件夹错误,不是一个文件夹");
return;
}
} else {
targetFile.mkdirs();
}
long startTime = System.currentTimeMillis();
FileInputStream in = null;
InputStreamReader inputStreamReader=null;
BufferedWriter bw = null;
BufferedReader br= null;
FileOutputStream fileOutputStream=null;
OutputStreamWriter outputStreamWriter = null;
try {
in = new FileInputStream(sourceFile);
inputStreamReader = new InputStreamReader(in, "GBK") ;
br = new BufferedReader(inputStreamReader);
String fullFileNm = sourceFile.getName();
int extIndex = fullFileNm.lastIndexOf(".");
String noExtFileNm = fullFileNm;
String extFileNm = "";
if (extIndex > 0) {
noExtFileNm = fullFileNm.substring(0, extIndex);
extFileNm = fullFileNm.substring(extIndex);
}
String tmpStr = "";
String lineStr = "";
int i = 1, fileCount = 0;
while ((lineStr = br.readLine()) != null) {
tmpStr += lineStr + "\r\n";
if (i % rows == 0) {
File file = new File(targetFile.getAbsolutePath() + "/" + noExtFileNm + "_" + fileCount + extFileNm);
fileOutputStream =new FileOutputStream(file);
outputStreamWriter = new OutputStreamWriter(fileOutputStream, "GBK");
bw = new BufferedWriter(outputStreamWriter);
bw.write(tmpStr);
tmpStr = "";
fileCount += 1;
IOUtils.closeQuietly(bw);
log.info("{}文件分割中,分割文件为:{}",fullFileNm,file.getName());
}
i++;
}
if ((i - 1) % rows != 0) {
File file = new File(targetFile.getAbsolutePath() + "/" + noExtFileNm + "_" + fileCount + extFileNm);
fileOutputStream =new FileOutputStream(file);
outputStreamWriter = new OutputStreamWriter(fileOutputStream, "GBK");
bw = new BufferedWriter(outputStreamWriter);
bw.write(tmpStr);
IOUtils.closeQuietly(bw);
IOUtils.closeQuietly(br);
fileCount += 1;
log.info("{}文件分割中,分割文件为:{}",fullFileNm,file.getName());
}
log.info("文件分割结束,共分割成了" + fileCount + "个文件");
} catch (Exception e) {
log.error("文件切割异常:{}",e);
}finally {
IOUtils.closeQuietly(in);
IOUtils.closeQuietly(inputStreamReader);
IOUtils.closeQuietly(fileOutputStream);
IOUtils.closeQuietly(outputStreamWriter);
}
long endTime = System.currentTimeMillis();
log.info("初次导入存量数据总耗时" + (endTime - startTime) / 1000 + "秒");
}
}
切割大文件TXT
文件分割工具
最新推荐文章于 2025-10-20 15:17:32 发布
2957

被折叠的 条评论
为什么被折叠?



