当前位置: 首页 > news >正文

springboot 框架把 resources下的zip压缩包, springboot 项目启动后解压到项目根目录工具类

最近有一个需求,在开发的时候 有一些c++的扩展文件 需要放到服务器上,如果手动放上去,给用户部署项目就很麻烦,就根据这个需求,先把项目需要的 扩展文件 打包成zip压缩包 然后项目启动的时候 把resources文件夹下的 zip压缩包 解压到 项目根目录,这样就很方便。下面的工具类,在什么时机调用,大家可以根据自己的需求自行调整,我是在springboot启动的 run生命周期里 调用的
今天就分享一下 我封装的这个java版的 zip 解压工具类
直接上代码,有需要的小伙伴,复制直接可以使用:

package com.xx.xxx.utils;import org.springframework.core.io.ClassPathResource;import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.nio.file.Paths;/*** User:Json* Date: 2025/4/27**/
public class ZipUtils {public static boolean extractZipFromJar(String zipFileInJar, String destinationDirectory) {ClassPathResource resource = new ClassPathResource(zipFileInJar);Path targetDir = Paths.get(destinationDirectory); // 目标目录是根目录try (InputStream inputStream = resource.getInputStream();ZipInputStream zipInputStream = new ZipInputStream(inputStream)) {// 创建目标目录,如果不存在if (!Files.exists(targetDir)) {Files.createDirectories(targetDir);}ZipEntry entry;while ((entry = zipInputStream.getNextEntry()) != null) {Path filePath = targetDir.resolve(entry.getName());// 如果是目录,则创建目录if (entry.isDirectory()) {Files.createDirectories(filePath);} else {if (Files.exists(filePath)) {System.out.println("文件已经存在,跳过解压: " + filePath);continue;}try (OutputStream outputStream = Files.newOutputStream(filePath)) {byte[] buffer = new byte[2048]; // 调整缓冲区大小以提高解压速度int length;while ((length = zipInputStream.read(buffer)) > 0) {outputStream.write(buffer, 0, length);}}}zipInputStream.closeEntry();}// 解压完成,输出日志System.out.println("ZIP 文件解压完成,已解压到:" + targetDir.toString());return true;} catch (IOException e) {// 记录详细的错误信息System.out.println("解压失败: " + e.getMessage());e.printStackTrace();return false;}}/*** 检查根目录是否存在某个文件夹* @param folderName 要检查的文件夹名称* @return 如果文件夹存在,返回 true;否则返回 false*/public static boolean isFolderExists(String folderName) {Path path = Paths.get(System.getProperty("user.dir"), folderName);  // 获取根目录下的文件夹路径return Files.exists(path) && Files.isDirectory(path);  // 检查文件夹是否存在且是目录}
}

下方是封面图:略过
在这里插入图片描述

相关文章:

  • 域对齐是什么
  • 基于STM32、HAL库的ATECC608B安全验证及加密芯片驱动程序设计
  • Kotlin-高阶函数,Lambda表达式,内联函数
  • Spring Boot × K8s 监控实战-集成 Prometheus 与 Grafana
  • 在开发板上如何处理curl: (60) SSL certificate problem
  • openssl_error_string() 不要依赖错误信息作为逻辑判断
  • C语言复习笔记--数据在内存中的存储
  • 【LLM】解析RAG增强检索技术:原理、实现与应用
  • 23种设计模式-行为型模式之解释器模式(Java版本)
  • 光谱共焦位移传感器的优势有哪些?
  • 洛谷题解 | CF111C Petya and Spiders
  • 算法基础学习|02归并排序——分治
  • go单向链表
  • 阿里千问Qwen3技术解析与部署指南 :混合推理架构突破性优势与对DeepSeek R1的全面超越
  • 软件测试基础知识详解
  • 【VLNs篇】01:视觉语言导航(VLN)中的LLM角色
  • 关于flex布局
  • scratch代码——游戏开发 【弹簧与反弹】
  • ArrayList的elementData.length和size
  • 双向流热固耦合的收敛
  • 解放日报:持续拿出排头兵姿态先行者担当
  • 浙江官宣:五一假期,没电、没气、没油车辆全部免费拖离高速
  • 西班牙葡萄牙电力基本恢复
  • 大学男生被捉奸后将女生推下高楼?桂林理工大学辟谣
  • 美国“杜鲁门”号航母一战机坠海
  • 秦洪看盘|浮现新预期,存量资金积极调仓