一直没有思绪做啥小工具玩玩,因为好像没有啥思路。中间也因为工作编写了靠Excel公式无法处理的报表,不过不适合写公众号。直到现在,碰到要找某个名称的压缩包问题了,最关键是压缩包里还有压缩包,依靠简单的文件搜索是不行的。网上找过,没有类似工具,于是还是得自己写一下。
引言: 这是一个Java开发的GUI应用程序,用于扫描指定磁盘驱动器中的压缩文件(ZIP/RAR),可扫描包括压缩包内的压缩包(限zip),并记录扫描结果到文本文件中。 1.支持9层深度扫描,能发现深层嵌套的压缩文件。 2.自动解压并扫描ZIP中的嵌套ZIP文件。 1.后台扫描不影响UI响应,进度实时更新。 2.对无权限目录进行友好提示而非崩溃。 1.提供图形界面让用户选择要扫描的磁盘(C:, D:, E:等)。搜索结果以表格形式展示,清晰易读。 2.将扫描结果保存到以磁盘命名的文本文件中(如C盘扫描结果保存为C.txt,清晰易读。 1.使用Swing实现图形用户界面 2.多线程处理保持UI响应 3.支持UTF-8编码处理 4.通过maven-shade-plugin打包为可执行JAR searchCompressedFiles()方法实现深度优先搜索: 使用MAX_DEPTH=9限制递归深度防止栈溢出 对每个目录先检查访问权限,无权限时记录日志 文件类型判断采用小写转换确保跨平台兼容 实时更新GUI进度显示当前扫描路径。 创建临时文件保存嵌套ZIP内容 使用缓冲流(8KB)高效复制数据 递归处理嵌套ZIP内容 最终删除临时文件确保资源释放 全程使用UTF-8编码处理文件名。 系统清理:快速查找磁盘中所有压缩文件进行清理 安全检查:扫描可疑压缩文件进行病毒检测 文件归档:整理分散的压缩文件到统一目录 空间分析:统计压缩文件占用空间情况 开发调试:检查项目中嵌套的依赖包 这个压缩文件扫描系统采用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了。压缩文件扫描工具



// 主线程启动Swing界面
SwingUtilities.invokeLater(() -> {
while (true) {
String selectedDrive = showDriveSelectionDialog();
// 扫描逻辑...
}
});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); // 递归扫描
}
}
}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);
}
}



本文链接:https://www.kinber.cn/post/5379.html 转载需授权!
推荐本站淘宝优惠价购买喜欢的宝贝:

支付宝微信扫一扫,打赏作者吧~
