技术标签: 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/
文件夹下。
运行后
文章浏览阅读6.5k次,点赞12次,收藏108次。禁忌搜索算法求解TSP问题-python实现(附代码)
文章浏览阅读3k次,点赞3次,收藏6次。1.知识点:逆序建立链表+节点删除 2.题意:按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除(值相同的元素只保留最后输入的一个) 3.注意事项:节点删除时若删除节点为尾节点的情况代码:#include <stdio.h>#include <stdlib.h>typedef struct str{ int num; ..._数据结构单链表怎么实现单链表数据的去重
文章浏览阅读974次。args: 要执行的shell命令,默认应该是一个字符串序列,如[‘df’, ‘-Th’]或(‘df’, ‘-Th’),也可以是一个字符串,如’df -Th’,但是此时需要把shell参数的值置为True。shell: 如果shell为True,那么指定的命令将通过shell执行。如果我们需要访问某些shell的特性,如管道、文件名通配符、环境变量扩展功能,这将是非常有用的。_subprocess模块
文章浏览阅读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类型数据,不对
文章浏览阅读2.7k次。Matlab 读写*.xml文件1.摘要 因为经常使用将图像中的目标标注信息保存在*.xml文件中。在训练深度神经网络是常用这样的训练数据。有时候需要使用原有的数据来扩充数据,而最常用的工具也就是Matlab(这里示例使用的Matlab2016b)。在这篇博文中主要介绍:①Matlab读取*.xml文件信息;②将*.xml文件中的信息显示在对应的图像上,可以简单可视化数据;③将在图像中..._如何用matlab将图像写入xml格式
文章浏览阅读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位。
文章浏览阅读1.2k次。请注意,这种方法仅适用于改变变量的输出值,而不会直接修改变量本身的存储值。如果你需要改变变量本身的有效位数,可能需要使用其他库或自定义数据类型来实现。对于改变变量本身的有效位数,C++标准库中没有直接提供内置函数。函数对结果进行四舍五入,并将结果除以因子,从而限制了浮点数的有效位数为指定的精度。这些方法都是通过控制输出的方式来实现保留有效位数,而不是直接修改变量本身。来将浮点数转换为字符串,并通过控制字符串的精度来实现保留有效位数。如果你需要限制变量的有效位数,可以使用一些数学函数来实现。_c++ double保留6位
文章浏览阅读1.6k次。本片文章重点参考《Android进阶解密》1.基于架构不同jvm 基于栈,需要去栈中读取数据,需要的指令多,效率慢(栈是内存上面的一段连续的存储空间)dvm是基于寄存器(寄存器是CPU上面的一块存储空间),没有类似jvm的栈操作指令(大量的出入栈打的指令)2.执行的字节码不同jvm是把java类编译成一个或者多个的.class文件,然后打包成jar文件的。dvm在jvm的基..._dvm和jvm区别
文章浏览阅读4.3k次,点赞29次,收藏41次。摘要:什么是Ajax,Ajax基本原理_ajax抓包
文章浏览阅读1.8k次。针对SpringBoot的开源渗透框架,以及Spring相关高危漏洞利用工具。_springboot漏洞检测工具