/**
* 分割文本文件(单线程)- 超大文件使用
* @param sourceTextFile 源文件
* @param singleFileRowNum 分割后每个文件的最大行数
* @return
*/
@SneakyThrows
public static List<File> textFileCutting2(File sourceTextFile, Long singleFileRowNum) {
Set<File> cuttingFiles = Collections.synchronizedSet(CollUtil.newHashSet());
boolean fileFlag = FileUtil.isFile(sourceTextFile);
AtomicLong row = new AtomicLong();
if(fileFlag) {
final File currentSourceTextFileDir = FileUtil.getParent(sourceTextFile, 1);
StreamUtil.of(sourceTextFile)
.forEach(line -> {
long currentRow = row.incrementAndGet();
Long cutFileIndex = (currentRow%singleFileRowNum == 0) ? currentRow/singleFileRowNum-1:currentRow/singleFileRowNum;
String cutFileIndexStr = StrUtil.padPre(Convert.toStr(cutFileIndex), 5, "0");
File cutFile = FileUtil.file(currentSourceTextFileDir, StrUtil.format("{}_cut{}.{}",FileUtil.mainName(sourceTextFile), cutFileIndexStr, StrUtil.blankToDefault(FileUtil.extName(sourceTextFile),"txt")));
FileUtil.writeLines(Arrays.asList(line), cutFile, StandardCharsets.UTF_8,true);
cuttingFiles.add(cutFile);
});
}
log.info("文件【{}】切割信息:总行数【{}】、每个切割文件的最大行数【{}】、共切割成【{}】个文件", FileUtil.getName(sourceTextFile), row, singleFileRowNum, cuttingFiles.size());
return CollUtil.newArrayList(cuttingFiles);
}
————————————————
版权声明:本文为CSDN博主「嗯嗯**」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:
https://blog.csdn.net/weixin_39651356/article/details/128072578【 在 conductor 的大作中提到: 】
: 数据处理超大文件,比如20G的CSV,确定64G内存不行,看起来一定要128G+。
: 我看主流主板(配7950X)号称都支持128G的内存,但是32G*4条插满会明显降频,甚至点不亮(和店主商量),看起来就不成熟。
: 求一个解决方案,预算15000,核显即可。
: ...................
--
FROM 106.39.37.*