You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

10亿行TXT文件按150万行分块时剩余行无法写入最后文件问题求助

最简修复方案

你当前代码的核心问题是仅在凑满150万行时触发存储逻辑,文件末尾不足阈值的内容不会触发保存判断,且你误以为listToSort是循环局部变量无法访问——实际上你的listToSort是定义在while循环外部的,只需在循环结束后加一段存储剩余内容的逻辑即可,无任何额外性能开销,无需提前统计行数。

在你原有代码的while循环结束、计时逻辑之前,新增以下代码:

// 新增:保存末尾不足150万行的剩余内容
if (!listToSort.isEmpty()) {
    String tmpFileLocation = String.format(path, temporaryFileCounter);
    sortAndSaveListToFile(tmpFileLocation, listToSort);
}

可选优化点

  • 给BufferedReader设置更大的缓冲区,比如设置8M缓冲区new BufferedReader(new FileReader(filePath), 8 * 1024 * 1024),比默认8k缓冲区大幅减少大文件读取的IO次数,速度提升明显。
  • 用try-with-resources语法包裹BufferedReader的创建逻辑,自动释放文件句柄,避免大文件处理时出现句柄泄漏问题。
  • 如果后续处理变长行文本,建议按内存占用阈值分块而非按行数分块,避免出现单块内容过大导致OOM的问题,比如设置单块最大占用1~2G内存就触发存储,适配性更强。
  • 当前你拆分行时提前把单词拆分加换行写入临时文件,若后续归并去重逻辑支持按行处理,可以考虑归并阶段再拆分单词,减少临时文件的写入总量,进一步提升效率。

内容的提问来源于stack exchange,提问作者Trusty_Investigator

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 01:15:04