当前位置: 首页 > 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);  // 检查文件夹是否存在且是目录}
}

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

http://www.dtcms.com/a/164192.html

相关文章:

  • 域对齐是什么
  • 基于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
  • 双向流热固耦合的收敛
  • (leetcode) 力扣100 4.移动零(两种O(n)方法 双指针)
  • 大模型核心技术及架构解析
  • 2025.4.29_STM32_看门狗WDG
  • 一文读懂 JavaScript 中的深浅拷贝
  • C#学习——类型、变量
  • 学习在暑假避免躺平和内卷(马井堂)
  • 16、路由守卫:设置魔法结界——React 19 React Router
  • 系统安装 ios放同一个u盘 ventory使用+windows安装,双系统互相访问中间盘
  • PPT/WORD如何实现Shift键加鼠标滚轮实现左右滑动
  • 嵌入式复习第一章