/**
     * 分割文本文件(单线程)- 超大文件使用
     * @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.*