技术标签: 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/
文件夹下。
运行后
文章浏览阅读123次。基于SSH+Tomcat+MySQL开发的简单学生信息管理系统项目介绍????????学生信息管理系统是一个基于SSH(Struts2+Spring+Hibernate)框架的Web应用系统,旨在实现学生信息的数字化管理和共享。随着高校学生人数的不断增加和管理需求的不断扩大,传统的手工管理模式已经无法满足学生信息管理的需求,因此开发一款基于SSH框架的学生信息管理系统变得尤为重要。该系统采用 SSH 框架,实..._基于ssh的学生管理系统源码
文章浏览阅读1.2k次。常上网的朋友可能会到过这样一些网站,一进入首页立刻会弹出一个窗口,或者按一个连接或按钮弹出,通常在这个窗口里会显示一些注意事项、版权信息、警告、欢迎光顾之类的话或者作者想要特别提示的信息。其实制作这样的页面效果非常的容易,只要往该页面的HTML里加入几段Javascript代码即可实现。下面俺就带您剖析它的奥秘。【1、最基本的弹出窗口代码】其实代码非常简单: _去掉浏览器状态栏显示的url
文章浏览阅读357次。GitHub Pages中找到我们主页的地址是。,内容先随便写一下,内容示例如下,填写之后点击。上创建一个新的代码仓库用于保存我们的网页。创建一个新文件,作为我们网站的主页。填写仓库名,格式必须为 你的。按钮,进入仓库创建页面。编写的,所以需要安装。_github pages + hexo
文章浏览阅读4.5k次,点赞15次,收藏34次。在RISC-V标准中,将异常(exception)定义为当前CPU运行时遇到的与指令有关的不寻常情况,而使用中断(interrupt)定义为因为外部异步信号而引起的让控制流脱离当前CPU的事件。而陷阱(trap)表示的则是,由异常或者中断引起的控制权转移到陷阱处理程序的过程。其实Xv6的定义和RISC-V的定义是相互兼容的,我们说在Xv6中有三种方式会触发陷阱:系统调用、中断和程序异常,其实系统调用中的ecall指令和程序执行中的异常都属于RISC-V标准中定义的异常情况,而。_risc-v 中断设计
文章浏览阅读2.5k次,点赞4次,收藏10次。pycharm常用快捷键及快捷键自定义修改_pycharm替换快捷键
文章浏览阅读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
文章浏览阅读580次。一、前言大家好,首先说明的是,这是一篇技术文,也是一篇not技术文,今天分享的是,当我获取了微信小程序英文取名的3500多个微信用户昵称、年龄段后,分析得到下面解果。。。二、Let's get it1.基本信息获取1.访问英文取名的用户基本信接口,获取英文取名用户微信名(NickName)、访问次数(Count)、总数据集(ResponseData),并将微信名存入文件。# ..._python 获取随机网名
文章浏览阅读2.2k次。PSPD_uwb帧payload结构
文章浏览阅读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和域服务器一样
文章浏览阅读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