SpringBoot 中 zip 文件解压工具类

SpringBoot 中 zip 文件解压工具类

zip 文件解压(不支持密码)

相关 Maven 依赖

<dependency>  <groupId>org.apache.commons</groupId>  <artifactId>commons-lang3</artifactId>  <version>3.6</version>  
</dependency>  
<dependency>  <groupId>org.apache.commons</groupId>  <artifactId>commons-compress</artifactId>  <version>1.21</version>  
</dependency>  
<dependency>  <groupId>com.googlecode.juniversalchardet</groupId>  <artifactId>juniversalchardet</artifactId>  <version>1.0.3</version>  
</dependency>

工具类

import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;  
import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;  
import org.apache.commons.lang3.StringUtils;  
import org.mozilla.universalchardet.UniversalDetector;  import java.io.BufferedInputStream;  
import java.io.BufferedOutputStream;  
import java.io.File;  
import java.io.IOException;  
import java.nio.file.Files;  
import java.nio.file.Path;  
import java.nio.file.Paths;  public class CompressUtils {  public static void main(String[] args) throws IOException {  String filePath = "C:\\Users\\MAC\\Desktop\\Desktop.zip";  String targetPath = "C:\\Users\\MAC\\Desktop";  File zipFile = new File(filePath);  File targetDir = new File(targetPath);  decompressZipFileWithoutPassword(zipFile, targetDir);  }  public static Boolean decompressZipFileWithoutPassword(File zipFile, File targetDir) throws IOException {  if (!zipFile.exists() || !zipFile.getName().endsWith("zip")) {  return false;  }  if (!targetDir.exists()) {  targetDir.mkdirs();  }  // 获取文件的编码格式  String encoding = FileUtils.detectFileEncoding(zipFile);  try (ZipArchiveInputStream zis = new ZipArchiveInputStream(new BufferedInputStream(Files.newInputStream(zipFile.toPath())), encoding)) {  ZipArchiveEntry entry = null;  while ((entry = zis.getNextZipEntry()) != null) {  // 如果时文件夹则忽略,也可以创建文件夹  if (entry.isDirectory()) continue;  String name = entry.getName();  Path unzipFilePath = Paths.get(targetDir.getAbsolutePath(), name);  Path parent = unzipFilePath.getParent();  // 判断父文件夹存不存在,不存在则创建  if (!Files.exists(parent)) parent.toFile().mkdirs();  try (BufferedOutputStream bos = new BufferedOutputStream(Files.newOutputStream(unzipFilePath))) {  byte[] buf = new byte[4096];  int len;  while ((len = zis.read(buf)) != -1) {  bos.write(buf, 0, len);  }  }  }  }  return true;  }  
}  class FileUtils {  /**  * 自动检测文件的编码格式  * @param file 需要检测的文件  * @return encoding 编码格式,默认为 UTF-8  * @throws IOException  */    public static String detectFileEncoding(File file) throws IOException {  String encoding = null;  try (BufferedInputStream bis = new BufferedInputStream(Files.newInputStream(file.toPath()))) {  UniversalDetector detector = new UniversalDetector(null);  byte[] buf = new byte[4096];  int len;  while ((len = bis.read(buf)) != -1 && !detector.isDone()) {  detector.handleData(buf, 0, len);  }  detector.dataEnd();  encoding = detector.getDetectedCharset();  detector.reset();  }  return !StringUtils.isBlank(encoding) ? encoding : "UTF-8";  }  
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/12402.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

练习题(2024/5/14)

1四数相加 II 给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < nnums1[i] nums2[j] nums3[k] nums4[l] 0 示例 1&#xff1a; 输入&#xff1a;n…

代码随想录训练营Day28:贪心算法06

1.738单调递增的数字 贪心策略&#xff1a;如果strNum[i]<strNum[i-1]那么strNum[i] 9,strNum[i-1]--;//比如87对应的最大的单调递增的就是79. 具体实现&#xff1a; 对于遇到小于的情况&#xff1a;如果strNum[i]<strNum[i-1]那么strNum[i] 9,strNum[i-1]--;遍历顺…

linux phpstudy 重启命令

[rootLinuxWeb phpstudy]# ./system/phpstudyctl restart 查看命令 1) phpstudy -start 启动小皮面板 2) phpstudy -stop 停止小皮面板 3) phpstudy -restart 重启小皮面板 4) phpstudy -status 查询面板状态 5) phpstudy -in…

OFDM802.11a的FPGA实现(十五)短训练序列:STS(含Matlab和verilog代码)

原文链接&#xff08;相关文章合集&#xff09;&#xff1a;OFDM 802.11a的xilinx FPGA实现 1.前言 在之前已经完成了data域数据的处理&#xff0c;在构建整个802.11a OFDM数据帧的时候&#xff0c;还剩下前导码和signal域的数据帧&#xff0c;这两部分的内容。 PLCP的前导部分…

Nodejs笔记2

模块化 模块化初体验 模块暴露数据 导入模块 fs 写绝对路径 require写相对路径不会受到影响 ./../不能省略 js 和json文件后缀可以省略 如果存在 命名相同的js和json文件&#xff0c;优先导入js文件 导入文件夹时的情况 require导入模块的基本流程 commonJS模块…

其它高阶数据结构①_并查集(概念+代码+两道OJ)

目录 1. 并查集的概念 2. 并查集的实现 3. 并查集的应用 3.1 力扣LCR 116. 省份数量 解析代码1 解析代码2 3.2 力扣990. 等式方程的可满足性 解析代码 本篇完。 写在前面&#xff1a; 此高阶数据结构系列&#xff0c;虽然放在⑤数据结构与算法专栏&#xff0c;但还是作…

【数据可视化01】matplotlib实例介绍4之六边形分箱图

目录 一、引言二、实例介绍 一、引言 hexbin是一个二维直方图&#xff0c;其中箱子是六边形&#xff0c;颜色表示每个箱子内的数据点数。 二、实例介绍 import matplotlib.pyplot as plt import numpy as np# Fixing random state for reproducibility np.random.seed(19680…

服务器利用率的神器脚本

在服务器管理的过程中&#xff0c;了解服务器的各项性能指标是至关重要的。无论是CPU的负载情况&#xff0c;内存使用情况&#xff0c;还是硬盘的存储空间以及TCP连接状态&#xff0c;这些都是我们判断服务器健康状态和性能的重要依据。然而&#xff0c;手动一项项去检查这些指…

【MySQL】Mysql——安装指南(Linux)

MySQL8.0.26-Linux版安装 1. 准备一台Linux服务器 云服务器或者虚拟机都可以; Linux的版本为 CentOS7; 2. 下载Linux版MySQL安装包 3. 上传MySQL安装包 4. 创建目录,并解压 mkdir mysqltar -xvf mysql-8.0.26-1.el7.x86_64.rpm-bundle.tar -C mysql5. 安装mysql的安装包 …

pip镜像源

1.1 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple 1.2 阿里云 https://mirrors.aliyun.com/pypi/simple/ 1.3 网易 https://mirrors.163.com/pypi/simple/ 1.4 豆瓣 https://pypi.douban.com/simple/ 1.5 百度云 https://mirror.baidu.com/pypi/simple/ 1.6 中科大 ht…

uniapp vue 获取天气数据

获取当前地址&#xff0c;通过高德天气数据&#xff0c;来展示天气温度风度等数据 //获取天气 getWeather(){// 获取天气预报uni.request({url: https://restapi.amap.com/v3/weather/weatherInfo, data: {city: 长沙,// extensions:all,key: xxxxxxxxxx//自己的高德密钥key},…

2024OD机试卷-转盘寿司 (java\python\c++)

题目:转盘寿司 题目描述 寿司店周年庆,正在举办 优惠活动 回馈新老客户。 寿司转盘上总共有 n 盘寿司,prices[i] 是第 i 盘寿司的价格, 如果客户选择了第 i 盘寿司,寿司店免费赠送客户距离第 i 盘寿司最近的下一盘寿司 j,前提是 prices[j] < prices[i],如果没有满足…

RAG 面向 LLM: 基于检索增强的大语言模型调研

摘要 作为 AI 领域最先进的技术之一,检索增强生成(RAG)技术可以提供可靠和最新的外部知识,为众多任务提供巨大的便利。特别是在 AI 生成内容(AIGC)时代,RAG 中检索强大的提供额外知识的能力使得检索增强生成能够辅助现有生成式 AI 生产高质量输出。最近,大语言模型(LLM)在语言…

Zoho CRM企业成长的智能引擎,智能化销售自动化

数字化时代&#xff0c;客户体验已成为企业竞争的核心要素。卓豪Zoho CRM&#xff0c;作为全球领先的SaaS云端客户关系管理平台&#xff0c;正引领着一场企业运营模式的变革&#xff0c;助力超过25万家企业跨越180多个国家&#xff0c;实现客户互动与业务增长的无缝对接。让我们…

广汽原车控制系统CAN协议控制汽车基本信息获取及数据应用

在现代汽车工业的迅速发展中&#xff0c;车辆控制系统的智能化和网络化已成为提升汽车性能的关键。广汽作为中国汽车行业的佼佼者&#xff0c;其在原车通信网络方面也取得了显著的成就。特别是广汽原车CAN&#xff08;Controller Area Network&#xff09;协议的应用&#xff0…

2024OD机试卷-分割均衡字符串 (java\python\c++)

题目:分割均衡字符串 题目描述 均衡串定义: 字符串 中只包含两种字符,且这两种字符的个数相同。 给定一个均衡字符串,请给出可分割成新的均衡子串的最大个数。 约定:字符串中只包含大写的 X 和 Y 两种字符。 输入描述 字符串的长度:[2, 10000]。 给定的字符串均为均…

添砖Java之路(其六)——通过集合制作的学生信息管理系统

目录 前言&#xff1a; 源码&#xff1a; 前言&#xff1a; 我对于集合的理解&#xff0c;感觉就类似于顺序表这样的数据结构&#xff0c;然后他存储的数据不能是基本类型&#xff0c;如果要用也只能用对应基本数据的包装类。 对于集合有很多方法&#xff0c;我的建议就是去…

【运维】nvidia-smi错误信息:Failed to initialize NVML: Driver/library version mismatch

【运维】错误信息&#xff1a;Failed to initialize NVML: Driver/library version mismatch 是因为Nvidia的驱动冲突的原因 本地部署&#xff1a;本地Docker容器部署&#xff0c;本地验证后打包镜像 远程部署&#xff1a;镜像部署阿里云PAI EAS 因为在容器中安装了驱动版本&a…

短视频最后的慢动作怎么做:成都鼎茂宏升文化传媒公司

短视频最后的慢动作怎么做&#xff1a;技巧与创意实践指南 在短视频创作的浩瀚宇宙中&#xff0c;慢动作特效如同一颗璀璨的星辰&#xff0c;为作品增添无限魅力与情感深度。它不仅能够放大细节之美&#xff0c;还能延长关键瞬间&#xff0c;引发观众强烈的情感共鸣。短视频最…

SpringBoot项目的项目部署全过程

一、前端 安装nginx 1.将提前准备好的nginx的安装包上传到Linux中/opt目录下(我用的是Xftp) 2.解压 2.1:在xshell中解压该文件: tar -zxvf nginx-1.20.1.tar.gz 2.2:进入解压后的目录 cd nginx-1.20.1/ 2.3:安装需要的依赖 yum -y install zlib zlib-devel openssl openssl-de…