Java合并文件分片需按序读取.part001等命名的分片,用正则提取序号排序;以FileInputStream和FileOutputStream配合8KB缓冲区流式写入目标文件;全程使用try-with-resources确保流关闭;可选校验总大小或MD5一致性。

Java 中用字节流合并被切片的文件片段,核心是按顺序读取每个分片(如 file.part001、file.part002…),再逐个写入到一个目标文件中。关键在于保证顺序、避免内存溢出、正确处理 IO 异常。
按命名规则排序并依次读取分片
分片文件通常有规律命名(如 xxx.part001、xxx.part002),不能直接用 File.list() 遍历——它不保证顺序。应先收集所有匹配文件,再按序号解析排序:
- 用正则提取序号(例如
Pattern.compile(".*\.part(\d+)$")) - 将
File和序号封装为对象,按序号升序排序 - 确保跳过非分片文件(如临时文件、校验文件)
用 FileInputStream + FileOutputStream 流式拼接
不要一次性把整个分片加载进内存。推荐使用固定缓冲区(如 8KB)循环读写:
- 创建
FileOutputStream目标文件(注意:用new FileOutputStream(dest, true)追加模式只在首次创建时用false;拼接必须从头写,所以首次用false,后续分片不能追加,而是靠顺序写入实现拼接) - 对每个已排序的分片,用
FileInputStream打开 →read(byte[])循环读 →write(byte[], off, len)写入目标流 - 每次读写后检查返回值(
read()返回 -1 表示结束,否则才是实际字节数)
善用 try-with-resources 确保流关闭
多个流嵌套时易遗漏关闭。用 try-with-resources 最安全:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
立即学习“Java免费学习笔记(深入)”;
- 目标输出流单独声明在最外层 try 中
- 每个分片输入流在内层 try 中打开,自动关闭不影响外层输出流
- 即使某个分片读取出错,已写入的内容不会丢失,但需捕获异常并清理(如删除不完整的目标文件)
可选:校验合并结果完整性
合并完成后建议验证:
- 对比原始总大小与各分片大小之和是否一致
- 如有 MD5/SHA256 校验码文件(如
file.md5),可对合并后的文件重新计算并比对 - 若分片含头部信息(如自定义魔数或偏移标记),需在写入前剥离,否则会损坏原文件
不复杂但容易忽略细节,比如序号解析错误导致乱序、缓冲区太小影响性能、忘记关闭流引发句柄泄漏。只要控制好顺序读写和资源管理,就能稳定还原原始文件。

















