解压压缩文件到指定目录,也可以接口接收压缩包进行处理
解压代码如下
package org.example.demo;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
/**
* @author : 骑猪撞地球QAQ
* @date : 2024/8/14 14:19
* @Description : 解压文件demo
*/
public class Demo {
public static void main(String[] args) throws IOException {
//1.创建一个File表示要解压的压缩包
File src = new File("E:\\zip\\测试压缩文件.zip");
//2.创建一个File表示压缩的目的地
File dest = new File("E:\\解压后");
//调用方法
unzip(src, dest);
}
/**
* 解压文件
* 解压的本质:把压缩包里面的每一个文件或者文件夹读取出来,按照层级拷贝到目的地中
* 方法可以优化,用try catch包起来,zip.close() 可以放在finally 中处理
* @param src 压缩文件
* @param dest 解压到目标文件内
* @throws IOException
*/
public static void unzip(File src, File dest) throws IOException {
// 创建一个解压缩流用来读取压缩包中的数据
ZipInputStream zip = new ZipInputStream(new FileInputStream(src), Charset.forName("GBK"));
// 获取压缩包里面的每一个ZipEntry对象
ZipEntry entry;
// 表示当前在压缩包中获取的文件或者文件夹
while ((entry = zip.getNextEntry()) != null) {
if (entry.isDirectory()) {
//文件夹:需要在目的地dest处创建一个同样的文件夹
File file = new File(dest, entry.toString());
file.mkdirs();
} else {
//文件:需要读取压缩包中的文件,并把他存到目的地dest文件夹中(按照层级目录存放)
FileOutputStream fos = new FileOutputStream(new File(dest, entry.toString()));
int b;
while ((b = zip.read()) != -1) {
// 写入文件
fos.write(b);
}
fos.close();
// 压缩包中的一个文件处理完毕
zip.closeEntry();
}
}
// 一定要关闭流
zip.close();
}
}
如果是前端传入的压缩文件:
// 使用MultipartFile接收文件,转为File
//压缩包存储路径
String temp = "E:\\face\\import\\";
File destFile = FileUtil.mkdir(temp);
try {
//步骤1、把上传的压缩包文件保存到指定压缩包路径
multipartFile.transferTo(destFile);
} catch (IOException e) {
//运行报错直接返回错误信息
log.error(e.getMessage());
}
// 步骤2、调用Hutool的ZipUtil压缩工具类的unzip方法来进行对压缩包文件的解压,解压到临时文件内
File mkdir = FileUtil.mkdir(temp + "1");
// 调用上面的方法,传入destFile、mkdir 既可进行解压