package com.ks.codegenerator.utils; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; /** * @author hxh * @title: ZipUtil * @description: 压缩/解压缩工具 * @date 2021/11/13 16:48 */ public class ZipUtil { /** * 压缩文件 * * @param sourceFilePath 源文件路径 * @param zipFilePath 压缩后文件存储路径 * @param zipFilename 压缩文件名 */ public static void compressToZip(String sourceFilePath, String zipFilePath, String zipFilename) { File sourceFile = new File(sourceFilePath); File zipPath = new File(zipFilePath); if (!zipPath.exists()) { zipPath.mkdirs(); } File zipFile = new File(zipPath + File.separator + zipFilename); try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile))) { writeZip(sourceFile, "", zos); //文件压缩完成后,删除被压缩文件 // FileUtil.deleteFileDir(sourceFile); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e.getMessage(), e.getCause()); } } /** * 遍历所有文件,压缩 * * @param file 源文件目录 * @param parentPath 压缩文件目录 * @param zos 文件流 */ public static void writeZip(File file, String parentPath, ZipOutputStream zos) { if (file.isDirectory()) { //目录 parentPath += file.getName() + File.separator; File[] files = file.listFiles(); for (File f : files) { writeZip(f, parentPath, zos); } } else { //文件 try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))) { //指定zip文件夹 ZipEntry zipEntry = new ZipEntry(parentPath + file.getName()); zos.putNextEntry(zipEntry); int len; byte[] buffer = new byte[1024 * 10]; while ((len = bis.read(buffer, 0, buffer.length)) != -1) { zos.write(buffer, 0, len); zos.flush(); } } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e.getMessage(), e.getCause()); } } } }