在这里插入图片描述

做这个工具的动机

平时整理代码、迁移项目、同步配置文件时,经常会遇到一个麻烦:两个目录看起来差不多,但不知道哪些文件内容真的变了。

市面上当然有成熟的文件对比工具,而且不少做得很好。但真正顺手的功能,往往都在收费版里:目录对比、内容同步、双栏编辑、差异复制,单独看都不复杂,组合起来就开始收费。

以前遇到这种情况,大概率就是忍一忍,或者继续找替代软件。现在有了大模型,思路就变了:既然需求很明确,为什么不直接手搓一个?

这个工具的出发点不是替代专业 IDE,也不是做一个商业级 diff 产品,而是解决自己的高频小痛点:我只想快速知道两个目录哪些文件一样、哪些不同、哪边缺了,并且能顺手同步或编辑。

只看文件名和修改时间不够可靠。修改时间可能被复制过程改变,文件大小也不能证明内容一致。真正稳一点的方式,是对文件内容做 hash,再按相对路径逐个比较。

所以这次我做了一个小型 Java 桌面工具,目标很明确:

  • 可以选择两个文件做对比
  • 可以选择两个目录做对比
  • 用文件 hash 判断内容是否一致
  • 能把缺失或不同的文件同步到另一边
  • 结果要直观:左边看左目录,右边看右目录
  • 相同文件标绿,不同文件标红
  • 双击后可以直接编辑左右两边内容

最终效果如下。

在这里插入图片描述

第一版:先把核心能力跑通

最开始的需求很简单:

用 Java 写一个文件对比工具,支持选择目录对比、选择文件对比、文件内容使用文件 hash 做对比,并支持内容同步。

这个版本我选择用 Java Swing 做界面,原因是它只依赖 JDK,不需要额外安装框架,发给别人也比较容易运行。

核心实现分成三块:

  1. 路径选择:用 JFileChooser 支持文件和目录选择。
  2. 内容判断:用 SHA-256 读取文件内容并计算 hash。
  3. 同步复制:对缺失或 hash 不同的文件,使用 Files.copy 覆盖复制。

这里没有把 hash 值当成最终展示重点。hash 是内部判断依据,用户真正关心的是“这个文件是否一样”“哪边缺了”“能不能同步”。

第二版:界面从单表改成左右双栏

第一版能用,但展示不够直观:所有文件混在一个表里,看起来像日志,不像对比工具。

于是第二轮改造的提示是:

不用显示 md5,将文件两边进行拆分,左边显示左边文件,右边显示右边目录文件,相同文件标绿,不同文件标红,然后双击可以编辑。

这一版改动的重点是交互:

  • 去掉界面上的 hash 列
  • 主界面拆成左右两个文件列表
  • 左边只显示左侧文件信息,右边只显示右侧文件信息
  • 相同文件用绿色背景
  • 不同或缺失文件用红色背景
  • 双击文件行打开编辑窗口

颜色虽然简单,但效率提升很明显:绿色表示不用管,红色表示需要处理。

第三版:双栏滚动和双文件编辑

目录文件一多,左右两边如果不能同步滚动,就会很难对齐查看。所以继续迭代:

滚动时候两边文件一起滚动,双击编辑时两个文件进行对比,不同的可以进行向左或者向右复制不同的内容。

这个版本加入了两个关键功能:

  • 主界面左右列表滚动联动,选中行也联动。
  • 双击后打开左右文件对比编辑器。

编辑器里做了行级差异高亮,左右文本区域同步滚动,并提供几个常用按钮:

  • Copy selected Left -> Right
  • Copy selected Right -> Left
  • Copy all Left -> Right
  • Copy all Right -> Left
  • Save

在这里插入图片描述

这不是专业 IDE 级别的 diff 算法,但对配置文件、脚本文件、说明文档这类文本已经够用。它解决的是一个很具体的问题:发现不同之后,不用再切到别的软件里复制粘贴。

实现思路拆解

目录对比时,程序会递归扫描左右目录,把每个文件转换成相对路径。

比如:

left/src/App.java
right/src/App.java

它们都会被归一成:

src/App.java

然后用这个相对路径做配对:

  • 两边都有:计算 hash,判断 SameDifferent
  • 只有左边有:标记 Left only
  • 只有右边有:标记 Right only

同步时逻辑也很直接:

  • Left -> Right:左边存在且右边缺失或不同,就复制到右边
  • Right -> Left:右边存在且左边缺失或不同,就复制到左边
  • 不做删除操作,避免误删目标目录里的额外文件

这次用到的提示词

如果你也想让大模型直接生成类似工具,可以不用拆成很多轮,直接用下面这个最终版提示词。

请用 Java Swing 写一个文件对比同步工具,要求:

1. 支持选择两个文件进行对比,也支持选择两个目录进行递归对比。
2. 文件内容使用 SHA-256 hash 判断是否一致,不要只依赖文件名、大小或修改时间。
3. 目录对比时按相对路径匹配文件。
4. 主界面左右拆分显示,左边显示左侧文件,右边显示右侧文件。
5. 相同文件行标绿色,不同或缺失文件行标红色。
6. 左右结果列表滚动联动,选中行联动。
7. 支持从左到右、从右到左同步缺失或不同文件,不做删除操作。
8. 双击文件行后打开左右文件对比编辑窗口。
9. 编辑窗口中左右文本同步滚动,不同行高亮。
10. 支持把选中文本或全部文本向左、向右复制,并支持保存。
11. 尽量只依赖 JDK,不引入外部库。

小结

这个工具不复杂,但它很实用。

它把“比较目录”“判断内容是否一致”“同步文件”“局部复制不同内容”这几个动作放到一个流程里,减少了来回切换工具的成本。

更重要的是,这种小工具很适合用 AI 辅助开发。以前觉得“好用的软件要付费,那就先凑合用”,现在可以换个思路:只要需求边界清楚,就可以让大模型先搭出一个可用版本,再按自己的工作流继续改。

如果只看这次实践给我的启发,就是一句话:很多工作流里的小痛点,不一定要等现成软件解决,有了大模型,自己手搓一个轻量工具,往往更快。

当然,这个版本还只是一个能跑起来的原型,实际使用体验还不算太好。比如差异对比还比较粗糙,编辑体验也没有专业工具那么顺手。后面我会继续优化它,把它从“能用”慢慢打磨到“好用”。

更多推荐