ZIP包 压缩&&解压缩
- 压缩:第一种方法,压缩不支持文件夹压缩,需要指定待压缩的所有文件路径。
- 压缩:第二种方法,压缩借助 hutool 工具包,封装适合业务的静态方法,方便调用。
- 解压:第一种方法、第二种方法都支持目标文件夹不存在时,自动创建。
package com.sang.web.support.util;
import cn.hutool.core.io.FileUtil;
import java.io.*;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
public class ZipUtil {
public static void zip(String input, String output) throws Exception {
final boolean exist = FileUtil.exist(output);
if (!exist) {
FileUtil.newFile(output);
}
byte[] buffer = new byte[1024];
final ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(output));
final List<File> fileList = Arrays.stream(input.split("\\|")).map(File::new).collect(Collectors.toList());
for (File file : fileList) {
final FileInputStream fileInputStream = new FileInputStream(file);
zipOutputStream.putNextEntry(new ZipEntry(file.getName()));
int len;
while ((len = fileInputStream.read(buffer)) > 0) {
zipOutputStream.write(buffer, 0, len);
}
zipOutputStream.closeEntry();
fileInputStream.close();
}
zipOutputStream.close();
}
public static void unzip(String zipFile, String outDir) throws Exception {
if (!FileUtil.exist(zipFile)) {
throw new FileNotFoundException();
}
final ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(zipFile));
ZipEntry entry = null;
while ((entry = zipInputStream.getNextEntry()) != null) {
if (!entry.isDirectory()) {
final File file = new File(outDir, entry.getName());
if (!file.exists()) {
final boolean mkdirs = file.getParentFile().mkdirs();
}
final FileOutputStream fileOutputStream = new FileOutputStream(file);
final BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
int len = -1;
final byte[] bytes = new byte[1024];
while ((len = zipInputStream.read(bytes)) != -1) {
bufferedOutputStream.write(bytes, 0, len);
}
bufferedOutputStream.close();
fileOutputStream.close();
}
zipInputStream.closeEntry();
}
zipInputStream.close();
}
public static void zip_hutool(String input, String output) {
final File[] files = Arrays.stream(input.split("\\|")).map(File::new).toArray(File[]::new);
cn.hutool.core.util.ZipUtil.zip(FileUtil.file(output), true, files);
}
public static void unzip_hutool(String zipFile, String outDir) {
cn.hutool.core.util.ZipUtil.unzip(zipFile, outDir);
}
public static void main(String[] args) throws Exception {
String input = "C:\\Users\\Desktop\\PDF 测试.pdf|C:\\Users\\Desktop\\PDF.pdf|C:\\Users\\Desktop\\11";
String outPut = "C:\\Users\\Desktop\\zipTest.zip";
ZipUtil.zip_hutool(input, outPut);
ZipUtil.unzip_hutool(outPut, "C:\\Users\\Desktop\\12");
}
}