JAVA实现zip压缩
需要:JDK1.8 或以上版本
参考资料:https://www.cnblogs.com/stromgao/p/16086838.html
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class ZipUtils { /** * 压缩<br> * 支持单个或者多个目录或文件<br> * 支持多层目录文件,保留空目录<br> * * @param destFile * @param srcFiles * @throws Exception */ public static void zip(File destFile, File... srcFiles) throws Exception { try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(destFile))) { for (File file : srcFiles) { if (file == null || !file.exists()) { continue; } recursionCompress(zos, file, file.getName()); } } catch (Exception e) { throw e; } } /** * 递归压缩 * * @param zos zip输出流 * @param srcFile 要压缩的文件 * @param zipEntryName 压缩后的zip节点名 * @throws Exception */ private static void recursionCompress(ZipOutputStream zos, File srcFile, String zipEntryName) throws Exception { // 如果是目录,则创建目录并递归压缩子文件 if (srcFile.isDirectory()) { // 添加目录 zos.putNextEntry(new ZipEntry(zipEntryName + File.separator)); zos.closeEntry(); // 遍历并压缩子文件 for (File subFile : srcFile.listFiles()) { String subZipEntryName = zipEntryName + File.separator + subFile.getName(); recursionCompress(zos, subFile, subZipEntryName); } return; } // 如果是文件,则压缩文件 zos.putNextEntry(new ZipEntry(zipEntryName)); try (FileInputStream inputStream = new FileInputStream(srcFile)) { int len; byte[] buf = new byte[2 * 1024]; while ((len = inputStream.read(buf)) != -1) { zos.write(buf, 0, len); } } catch (Exception e) { throw e; } zos.closeEntry(); } public static void main(String[] args) throws Exception { ZipUtils.zip(new File("C:/Users/Chao/Desktop/ziptest/aaa.zip"), new File("C:/Users/Chao/Desktop/ziptest/folder/")); ZipUtils.zip(new File("C:/Users/Chao/Desktop/ziptest/bbb.zip"), new File("C:/Users/Chao/Desktop/ziptest/folder/").listFiles()); System.out.println("finished!"); } }
分类:
JAVA工具类
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~