×

代码 | 一个GUI界面的压缩文件扫描工具

hqy hqy 发表于2025-07-25 16:15:01 浏览3 评论0

抢沙发发表评论

    一直没有思绪做啥小工具玩玩,因为好像没有啥思路。中间也因为工作编写了靠Excel公式无法处理的报表,不过不适合写公众号。直到现在,碰到要找某个名称的压缩包问题了,最关键是压缩包里还有压缩包,依靠简单的文件搜索是不行的。网上找过,没有类似工具,于是还是得自己写一下。





压缩文件扫描工具

引言:

      这是一个Java开发的GUI应用程序,用于扫描指定磁盘驱动器中的压缩文件(ZIP/RAR),可扫描包括压缩包内的压缩包(限zip),并记录扫描结果到文本文件中。





系统亮点

1
深度递归扫描
图片

1.支持9层深度扫描,能发现深层嵌套的压缩文件。

2.自动解压并扫描ZIP中的嵌套ZIP文件。

2
多线程UI,权限处理良好不崩溃
图片

1.后台扫描不影响UI响应,进度实时更新。

2.对无权限目录进行友好提示而非崩溃。

3
用户友好
图片

1.提供图形界面让用户选择要扫描的磁盘(C:, D:, E:等)搜索结果以表格形式展示,清晰易读。

2.将扫描结果保存到以磁盘命名的文本文件中(如C盘扫描结果保存为C.txt,清晰易读。


技术栈

Development Stack

1.使用Swing实现图形用户界面

2.多线程处理保持UI响应

3.支持UTF-8编码处理

4.通过maven-shade-plugin打包为可执行JAR




核心代码解析





主流程控制 

  • 采用Swing事件分发线程(EDT)作为主线程,通过SwingUtilities.invokeLater()确保GUI操作线程安全。
  • 主循环持续显示磁盘选择对话框,直到用户选择退出
// 主线程启动Swing界面
SwingUtilities.invokeLater(() -> {
    while (true) {
       String selectedDrive = showDriveSelectionDialog();
        // 扫描逻辑...
    }
});




递归扫描核心

  • searchCompressedFiles()方法实现深度优先搜索:

  • 使用MAX_DEPTH=9限制递归深度防止栈溢出

  • 对每个目录先检查访问权限,无权限时记录日志

  • 文件类型判断采用小写转换确保跨平台兼容

  • 实时更新GUI进度显示当前扫描路径。

private static void searchCompressedFiles(File dir, int depth) {
    if (depth > MAX_DEPTH) return;
    File[] files = dir.listFiles();
    for (File file : files) {
        if (file.isFile() && (file.getName().endsWith(".zip") || ...)) {
            processZipFile(file, depth + 1); // 处理压缩文件
        } else if (file.isDirectory()) {
            searchCompressedFiles(file, depth + 1); // 递归扫描
        }
    }
}




嵌套ZIP处理

  • 创建临时文件保存嵌套ZIP内容

  • 使用缓冲流(8KB)高效复制数据

  • 递归处理嵌套ZIP内容

  • 最终删除临时文件确保资源释放

  • 全程使用UTF-8编码处理文件名。

private static void processNestedZip(ZipFile zipFile, ZipEntry entry, int depth) {
    File tempFile = File.createTempFile("nested"".zip");
    // 提取嵌套ZIP到临时文件
    try (InputStream in = zipFile.getInputStream(entry);
         OutputStream out = new FileOutputStream(tempFile)) {
        // 文件复制逻辑...
    }
    // 递归处理嵌套ZIP
    try (ZipFile nestedZip = new ZipFile(tempFile)) {
        processZipEntries(nestedZip, depth);
    }
}




使用场景

  • 系统清理:快速查找磁盘中所有压缩文件进行清理

  • 安全检查:扫描可疑压缩文件进行病毒检测

  • 文件归档:整理分散的压缩文件到统一目录

  • 空间分析:统计压缩文件占用空间情况

  • 开发调试:检查项目中嵌套的依赖包




系统预览


图片
图片
图片
图片
---压缩文件扫描工具---




结语  

   这个压缩文件扫描系统采用Swing+多线程的经典组合,完美平衡了UI响应性和后台处理效率。工程化程度高,是规范的Maven项目结构,完善的POM配置(含shade打包插件),严格的UTF-8编码处理。代码健壮性突出,多层递归深度控制,全面的异常处理机制,临时文件安全管理,权限访问校验,用户体验优秀,直观的磁盘选择界面,实时进度反馈,清晰的树形结果输出,特别值得称赞的是其处理嵌套压缩文件的创新方案,通过临时文件+缓冲流的技术组合,在保证性能的同时实现了复杂嵌套结构的解析。整体代码风格规范,注释清晰,体现了专业级的Java工程实践!

网盘链接下载(后台回复ziprar获取).




笔者附言




    这次打包成了exe文件,用的是launch4j的工具,一开始用的exe4j,结果打包后360直接识别成病毒文件,这不是我想要的。launch4j的好处是,可以依赖本地的解压的jre环境运行,打开程序直接在jre栏目设置本地环境以及最低jre版本即可。为方便记忆,自己在公众号记录下。

“<jre><path>./jre-1.8</path><minVersion>1.6.0</minVersion></jre>”

      不过,按照这个,我感觉单位的程序有一部分大概也是这样的原理吧,因为看到了jre环境在里面。

      想来还是不忘初心的鹏鹏,但依旧是偷了懒,用deepseek帮忙写了这一篇文章的绝大部分文字。今后的脚本工具和微信推文也还是交给deepseek了。




打赏

本文链接:https://www.kinber.cn/post/5379.html 转载需授权!

分享到:


推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

 您阅读本篇文章共花了: 

群贤毕至

访客