Java解压zip到指定文件夹_java解压压缩包到指定文件夹-程序员宅基地

技术标签: jvm  java  idea  杂文  后端  开发语言  

引入下方工具类。

package com.jinzhi.common.utils;

import java.io.*;
import java.nio.charset.Charset;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

/**
 * 孟智超
 * 2022/12/8
 */
public class UnzipUtils {
    

    /**
     * 解压zip压缩文件到指定目录
     *
     * @param zipPath zip压缩文件绝对路径
     * @param descDir 指定的解压目录
     */
    public static void unzipFile(String zipPath, String descDir) throws IOException {
    
        try {
    
            File zipFile = new File(zipPath);
            if (!zipFile.exists()) {
    
                throw new IOException("要解压的压缩文件不存在");
            }
            File pathFile = new File(descDir);
            if (!pathFile.exists()) {
    
                pathFile.mkdirs();
            }
            InputStream input = new FileInputStream(zipPath);
            unzipWithStream(input, descDir);
        } catch (Exception e) {
    
            throw new IOException(e);
        }
    }

    /**
     * 解压
     *
     * @param inputStream
     * @param descDir
     */
    public static void unzipWithStream(InputStream inputStream, String descDir) {
    
        if (!descDir.endsWith(File.separator)) {
    
            descDir = descDir + File.separator;
        }
        try (ZipInputStream zipInputStream = new ZipInputStream(inputStream, Charset.forName("GBK"))) {
    
            ZipEntry zipEntry;
            while ((zipEntry = zipInputStream.getNextEntry()) != null) {
    
                String zipEntryNameStr = zipEntry.getName();
                String zipEntryName = zipEntryNameStr;
                if (zipEntryNameStr.contains("/")) {
    
                    String str1 = zipEntryNameStr.substring(0, zipEntryNameStr.indexOf("/"));
                    zipEntryName = zipEntryNameStr.substring(str1.length() + 1);
                }
                String outPath = (descDir + zipEntryName).replace("\\\\", "/");
                File outFile = new File(outPath.substring(0, outPath.lastIndexOf('/')));
                if (!outFile.exists()) {
    
                    outFile.mkdirs();
                }
                if (new File(outPath).isDirectory()) {
    
                    continue;
                }
                writeFile(outPath, zipInputStream);
                zipInputStream.closeEntry();
            }
            System.out.println("======解压成功=======");
        } catch (IOException e) {
    
            System.out.println("压缩包处理异常,异常信息{}" + e);
        }
    }

    //将流写到文件中
    public static void writeFile(String filePath, ZipInputStream zipInputStream) {
    
        try (OutputStream outputStream = new FileOutputStream(filePath)) {
    
            byte[] bytes = new byte[4096];
            int len;
            while ((len = zipInputStream.read(bytes)) != -1) {
    
                outputStream.write(bytes, 0, len);
            }
        } catch (IOException ex) {
    
            System.out.println("解压文件时,写出到文件出错");
        }
    }
}

编写测试方法进行测试

    //测试方法
    public static void main(String[] args) throws IOException {
    

        String zipPath = "D:/test/电子证书 (6).zip";
        String descDir = "D:/test/jy/";

        unzipFile(zipPath, descDir);
    }

D:/test/电子证书 (6).zip压缩文件解压到D:/test/jy/文件夹下。

在这里插入图片描述
在这里插入图片描述

运行后

在这里插入图片描述
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45692705/article/details/128325374

智能推荐

禁忌搜索算法求解TSP问题-python实现-程序员宅基地

文章浏览阅读6.5k次,点赞12次,收藏108次。禁忌搜索算法求解TSP问题-python实现(附代码)

数据结构实验之链表七:单链表中重复元素的删除_数据结构单链表怎么实现单链表数据的去重-程序员宅基地

文章浏览阅读3k次,点赞3次,收藏6次。1.知识点:逆序建立链表+节点删除 2.题意:按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除(值相同的元素只保留最后输入的一个) 3.注意事项:节点删除时若删除节点为尾节点的情况代码:#include <stdio.h>#include <stdlib.h>typedef struct str{ int num; ..._数据结构单链表怎么实现单链表数据的去重

Python模块学习:subprocess模块详解-程序员宅基地

文章浏览阅读974次。args: 要执行的shell命令,默认应该是一个字符串序列,如[‘df’, ‘-Th’]或(‘df’, ‘-Th’),也可以是一个字符串,如’df -Th’,但是此时需要把shell参数的值置为True。shell: 如果shell为True,那么指定的命令将通过shell执行。如果我们需要访问某些shell的特性,如管道、文件名通配符、环境变量扩展功能,这将是非常有用的。_subprocess模块

Springboot + vue 后端把Long类型的数据传给前端,前端可能会出现精度丢失的情况,以及解决方案_vue 前端接受long类型数据,不对-程序员宅基地

文章浏览阅读2.6k次,点赞2次,收藏7次。1前端解决方案:https://juejin.im/post/5c51526fe51d455047338a2a这位大神的方法 获取到jsonlint.js然后导入本地vue项目本地使用import jsonlint from "@/utils/jsonlint.js"// 创建axios实例const service = axios.create({ 在这里重写方法 transformResponse: [function (data) { // Do whatever._vue 前端接受long类型数据,不对

Matlab 读写*.xml文件_如何用matlab将图像写入xml格式-程序员宅基地

文章浏览阅读2.7k次。Matlab 读写*.xml文件1.摘要 因为经常使用将图像中的目标标注信息保存在*.xml文件中。在训练深度神经网络是常用这样的训练数据。有时候需要使用原有的数据来扩充数据,而最常用的工具也就是Matlab(这里示例使用的Matlab2016b)。在这篇博文中主要介绍:①Matlab读取*.xml文件信息;②将*.xml文件中的信息显示在对应的图像上,可以简单可视化数据;③将在图像中..._如何用matlab将图像写入xml格式

uniapp中nvue在页面渲染前给数据赋值_uniapp data中的数据可以之前互相赋值吗-程序员宅基地

文章浏览阅读1.8k次。应用场景是,在一个页面初始化的时候要给一个data内数据赋值,这个数据绑定到了页面v-for上,nvue中的所有生命周期都不能实现在渲染前给数据赋值,会报错,解决办法是定义一个常量去设置值,然后在data内把常量赋值给目标数据。..._uniapp data中的数据可以之前互相赋值吗

随便推点

关于百度地图坐标转换接口的研究_百度地图坐标转换接口实力-程序员宅基地

文章浏览阅读762次。来源:http://www.cnblogs.com/Tangf/archive/2012/09/16/2687236.html这个世界的坐标系统已经让人搞得昏头转向(请看这篇:国内各地图API比较),而百度地图还用了自家的坐标系统,今天偶然看到百度地图批量转换接口,心想看看代码反转一下,但尝试无果。虽然将百度坐标转换成火星坐标不成,但我还是有些东西想和大家分享,使用百度地图坐标接口实现地球_百度地图坐标转换接口实力

串口通信功能介绍和配置-程序员宅基地

文章浏览阅读379次,点赞9次,收藏8次。测试串口我们需要一个串口调试工具,可以使用串口烧录工具或者STC8核心板扮演这个角色,具体的接线方式参考下面的表格。为要设置的停止位数,常见的取值为cstopb=1、-cstopb=2,基本上默认值为cstopb。为奇偶校验类型,可选值为-parity(无校验)、even(偶校验)和odd(奇校验)。从windows的串口助手发数据给泰山派,只需要查看 ttyS3的内容即可。 cs 数据位数,常见的取值为5、6、7、8,基本上默认都是8位。

C++保留有效位数_c++ double保留6位-程序员宅基地

文章浏览阅读1.2k次。请注意,这种方法仅适用于改变变量的输出值,而不会直接修改变量本身的存储值。如果你需要改变变量本身的有效位数,可能需要使用其他库或自定义数据类型来实现。对于改变变量本身的有效位数,C++标准库中没有直接提供内置函数。函数对结果进行四舍五入,并将结果除以因子,从而限制了浮点数的有效位数为指定的精度。这些方法都是通过控制输出的方式来实现保留有效位数,而不是直接修改变量本身。来将浮点数转换为字符串,并通过控制字符串的精度来实现保留有效位数。如果你需要限制变量的有效位数,可以使用一些数学函数来实现。_c++ double保留6位

dvm 与 jvm区别_dvm和jvm区别-程序员宅基地

文章浏览阅读1.6k次。本片文章重点参考《Android进阶解密》1.基于架构不同jvm 基于栈,需要去栈中读取数据,需要的指令多,效率慢(栈是内存上面的一段连续的存储空间)dvm是基于寄存器(寄存器是CPU上面的一块存储空间),没有类似jvm的栈操作指令(大量的出入栈打的指令)2.执行的字节码不同jvm是把java类编译成一个或者多个的.class文件,然后打包成jar文件的。dvm在jvm的基..._dvm和jvm区别

【Python爬虫教程】基础篇-16 Ajax数据爬取基本原理_ajax抓包-程序员宅基地

文章浏览阅读4.3k次,点赞29次,收藏41次。摘要:什么是Ajax,Ajax基本原理_ajax抓包

spring综合性利用工具-SpringBoot-Scan(一)_springboot漏洞检测工具-程序员宅基地

文章浏览阅读1.8k次。针对SpringBoot的开源渗透框架,以及Spring相关高危漏洞利用工具。_springboot漏洞检测工具

推荐文章

热门文章

相关标签