找出重复文件是一门面向准备处理真实文件内容的学习者的 Java 实践项目课程。你将构建一个可复用的只读检查器,找出内容相同文件的完整分组,并保留每一条原始路径。名称不同的文件可能字节相同;名称或大小相同的文件也可能内容不同。
课程包含两个引导实验和一个挑战实验。先读取二进制流,保存完整路径清单;再用大小和 SHA-256 指纹缩小候选范围,通过实际字节比较确认相同,并在修改练习副本后重新生成报告。挑战实验将同一机制用于另一份资料集。每个实验独立初始化。建议预留约 150 分钟,这是包含阅读和普通纠错的作者估计。
你将学到什么
完成本课程后,你将能够:
- 使用
try-with-resources读取二进制文件,并使用每次读取实际返回的长度; - 计算 SHA-256 候选指纹,完整记录每条路径,包括空文件和最后不足一个缓冲区的数据;
- 通过真实字节比较确认候选相同,而不把名称、大小或摘要当作证明;
- 保留重复组的全部成员,包括三份及以上的组,不把单独文件列为重复;
- 修改练习文件后重新生成反映当前内容的报告,同时保留全部原始文件;
- 将报告写在扫描目录树之外,并将不可读或不支持的输入报告为失败。
本课程适合谁
本课程适合希望在实用终端程序中组合标准库文件处理、集合和异常知识的 Java 学习者。
前置要求: Java 类、方法、基础集合、异常、初步文件读取和基本终端路径操作。管理社区工具借还,尤其第二个引导实验,提供文件读取与 I/O 异常基础;具备同等知识也可以。本课程会在使用前解释二进制流、读取长度、资源关闭以及候选筛选与字节比较的区别。
学习环境: LabEx 提供浏览器中的 WebIDE,包含集成终端、Java 编译器、起始代码和真实样本文件,其中包括小型 PNG 图片。无需在本机安装 Java 即可运行并检查文件。程序命令、标签和输出保留英文。
常见问题
程序会删除重复文件吗?
不会。交付物是检查器和供审阅的完整分组报告。全部原件都会保留;自动删除、修复和磁盘清理不在项目范围内。
为什么计算指纹后还要比较字节?
大小和 SHA-256 帮助选择候选。最终判断来自实际内容比较,因此程序既能保留所有相同文件的路径,也能区分同大小但内容不同的文件。本课程不把摘要当作内容相等的数学证明。
项目支持哪些输入?
支持扫描期间保持稳定的普通文件和目录,包括含空格和 UTF-8 字符的文件名。符号链接、特殊文件,以及包含制表符或换行的路径会被拒绝。读取失败不能伪装成完整扫描成功。报告放在输入目录树之外。各实验自带数据,无需旧 VM 文件;本项目不提供并发快照保证。

