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

智能推荐

基于SSH+Tomcat+MySQL开发的简单学生信息管理系统-程序员宅基地

文章浏览阅读123次。基于SSH+Tomcat+MySQL开发的简单学生信息管理系统项目介绍????????学生信息管理系统是一个基于SSH(Struts2+Spring+Hibernate)框架的Web应用系统,旨在实现学生信息的数字化管理和共享。随着高校学生人数的不断增加和管理需求的不断扩大,传统的手工管理模式已经无法满足学生信息管理的需求,因此开发一款基于SSH框架的学生信息管理系统变得尤为重要。该系统采用 SSH 框架,实..._基于ssh的学生管理系统源码

如何屏蔽IE地址栏及状态栏中的URL显示?_去掉浏览器状态栏显示的url-程序员宅基地

文章浏览阅读1.2k次。常上网的朋友可能会到过这样一些网站,一进入首页立刻会弹出一个窗口,或者按一个连接或按钮弹出,通常在这个窗口里会显示一些注意事项、版权信息、警告、欢迎光顾之类的话或者作者想要特别提示的信息。其实制作这样的页面效果非常的容易,只要往该页面的HTML里加入几段Javascript代码即可实现。下面俺就带您剖析它的奥秘。【1、最基本的弹出窗口代码】其实代码非常简单: _去掉浏览器状态栏显示的url

(一)Hexo + GitHub Pages 搭建个人博客网站,最全最新教程来了【亲测有效】_github pages + hexo-程序员宅基地

文章浏览阅读357次。GitHub Pages中找到我们主页的地址是。,内容先随便写一下,内容示例如下,填写之后点击。上创建一个新的代码仓库用于保存我们的网页。创建一个新文件,作为我们网站的主页。填写仓库名,格式必须为 你的。按钮,进入仓库创建页面。编写的,所以需要安装。_github pages + hexo

6.S081——补充材料——RISC-V架构中的异常与中断详解_risc-v 中断设计-程序员宅基地

文章浏览阅读4.5k次,点赞15次,收藏34次。在RISC-V标准中,将异常(exception)定义为当前CPU运行时遇到的与指令有关的不寻常情况,而使用中断(interrupt)定义为因为外部异步信号而引起的让控制流脱离当前CPU的事件。而陷阱(trap)表示的则是,由异常或者中断引起的控制权转移到陷阱处理程序的过程。其实Xv6的定义和RISC-V的定义是相互兼容的,我们说在Xv6中有三种方式会触发陷阱:系统调用、中断和程序异常,其实系统调用中的ecall指令和程序执行中的异常都属于RISC-V标准中定义的异常情况,而。_risc-v 中断设计

pycharm常用快捷键及快捷键自定义修改_pycharm替换快捷键-程序员宅基地

文章浏览阅读2.5k次,点赞4次,收藏10次。pycharm常用快捷键及快捷键自定义修改_pycharm替换快捷键

64位hash java_字符串生成64位hash字符串-程序员宅基地

文章浏览阅读1.2k次。import java.io.UnsupportedEncodingException;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;public class SHA256Util {public static void main(String[] args) {System.out..._java hash64_chars

随便推点

Python分析 | 从00-90后的微信昵称_python 获取随机网名-程序员宅基地

文章浏览阅读580次。一、前言大家好,首先说明的是,这是一篇技术文,也是一篇not技术文,今天分享的是,当我获取了微信小程序英文取名的3500多个微信用户昵称、年龄段后,分析得到下面解果。。。二、Let's get it1.基本信息获取1.访问英文取名的用户基本信接口,获取英文取名用户微信名(NickName)、访问次数(Count)、总数据集(ResponseData),并将微信名存入文件。# ..._python 获取随机网名

UWB 帧结构_uwb帧payload结构-程序员宅基地

文章浏览阅读2.2k次。PSPD_uwb帧payload结构

jScrollPane的使用(jquery滚动条插件)_jquery.jscrollpane.min.js-程序员宅基地

文章浏览阅读9.3k次。这是一个js的页面滚动条插件使用时引入三个文件:(路径自行填写)然后再给需要添加滚动条的容器加上一个方法,搞定$(function(){ $("#contentDiv").jScrollPane();})太好用了!ps:如果要修改滚动条的默认样式可以打开jquery.jscrollpane.css_jquery.jscrollpane.min.js

智慧采购管理系统电子招投标优势浅析,助力建筑工程企业高效做好采购管理工作_招标采购智慧信息管理系统-程序员宅基地

文章浏览阅读550次。随着建筑工程行业的蓬勃发展,竞争也日益激烈。在项目执行过程中,从项目前期投标开始,到项目立项、施工过程、竣工结束的整个过程中,采购活动频繁,且采购类型较多,各项采购金额巨大,如何应用电子采购平台,实现数字化采购、提升项目管理效益目标至关重要。招标采购是建筑工程行业的主要采购方式,传统的招标投标繁杂的基础性、程序性、流程化的工作需要耗费大量的人力和时间,而数字化采购平台在线便可完成招标、投标、评标、定标等招投标活动,取代原来极其繁琐、无法交叉检查的传统招标流程,让企业招采能高效工作。应用采购系统实现电子招投标_招标采购智慧信息管理系统

建立备份域控服务器,备份域控制器-程序员宅基地

文章浏览阅读1.8k次。备份域控制器10/25/2013本文内容上一次修改主题: 2005-11-11备份域控制器以确保它们的可用性是很重要的。备份域控制器就像备份 Exchange 成员服务器一样。备份域控制器和备份 Exchange 成员服务器的主要区别在于,在备份域控制器时,不必考虑 Exchange 数据库。用于备份域控制器的方法取决于所选择的灾难恢复策略。备份域控制器的系统状态数据使用“备份”备份域控制器的系统..._备份域 ip和域服务器一样

ROS自定义msg及使用_ros 自定义msg-程序员宅基地

文章浏览阅读4k次,点赞3次,收藏16次。一、创建msg文件msg是用来描述ROS message的简单文本,用来生成不同语言的消息源代码。可以看作是将一些ros内置类型进行重命名定义。进入ROS工作空间中,创建一个存放msg文件的包(此处以博主所用的实际工程为例)。$ cd Control/src/controller $ mkdir msg && cd msg$ touch car_state.msg //博主ROS工程中所用的在car_staete.msg中输入如下:float64 xfloat64 yfl_ros 自定义msg

推荐文章

热门文章

相关标签