这2个工具类都推荐使用统一个场景的不通过写法
推荐第一种

package com.gblfy.test;import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.CRC32;
import java.util.zip.CheckedOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;/*** java实现zip压缩文件(同一文件夹下的多个文件夹打成一个zip包)** @author gblfy* @date 2020-07-02*/
public class ZipCompressor {static final int BUFFER = 8192;private File zipFile;public ZipCompressor(String pathName) {zipFile = new File(pathName);}/*** 压缩入口* 适配:* 1.压缩文件* 2.压缩文件夹** @param pathName 传入一个或者多个文件/文件夹的绝对路径 可变参数*/public void compress(String... pathName) {ZipOutputStream out = null;try {FileOutputStream fileOutputStream = new FileOutputStream(zipFile);CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream,new CRC32());out = new ZipOutputStream(cos);String basedir = "";for (int i = 0; i < pathName.length; i++) {//循环遍历传入的文件或者文件夹的绝对路径的 可变参数compress(new File(pathName[i]), out, basedir);}out.close();} catch (Exception e) {throw new RuntimeException(e);}}/*** 判断传参类型:是目录还是文件* <p>* 1.如果是文件,则调用压缩文件方法* 2.如果是目录,则调用压缩目录方法* </p>** @param file* @param out* @param basedir*/private void compress(File file, ZipOutputStream out, String basedir) {if (file.isDirectory()) {System.out.println("压缩:" + basedir + file.getName());//调用压缩目录方法this.compressDirectory(file, out, basedir);} else {System.out.println("压缩:" + basedir + file.getName());//调用压缩文件方法this.compressFile(file, out, basedir);}}/*** 压缩一个目录*/private void compressDirectory(File dir, ZipOutputStream out, String basedir) {if (!dir.exists()) {System.out.println("压缩目录不存在,请核实!");return;}File[] files = dir.listFiles();for (int i = 0; i < files.length; i++) {/* 递归 */compress(files[i], out, basedir + dir.getName() + "/");}}/*** 压缩一个文件*/private void compressFile(File file, ZipOutputStream out, String basedir) {if (!file.exists()) {System.out.println("压缩文件不存在,请核实!");return;}try {BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));ZipEntry entry = new ZipEntry(basedir + file.getName());out.putNextEntry(entry);int count;byte data[] = new byte[BUFFER];while ((count = bis.read(data, 0, BUFFER)) != -1) {out.write(data, 0, count);}bis.close();} catch (Exception e) {throw new RuntimeException(e);}}/*** 压缩指定文件(文件个数限定1个)** @param srcPathName*/public void compress(String srcPathName) {File file = new File(srcPathName);if (!file.exists()) {throw new RuntimeException(srcPathName + "不存在!");}try {FileOutputStream fileOutputStream = new FileOutputStream(zipFile);CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream,new CRC32());ZipOutputStream out = new ZipOutputStream(cos);String basedir = "";compress(file, out, basedir);out.close();} catch (Exception e) {throw new RuntimeException(e);}}public static void main(String[] args) {ZipCompressor zc = new ZipCompressor("D:/resource.zip");// String b = "D:\\1\\";String b = "D:\\1.jpg";zc.compress(b);// zc.compress("D:\\1.jpg", "D:\\3.jpeg", "D:\\4.jpg", b);}
}
package com.gblfy.test;import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.CRC32;
import java.util.zip.CheckedOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;/*** java实现zip压缩文件(同一文件夹下的多个文件夹打成一个zip包)** @author gblfy* @date 2020-07-02*/
public class ZipCompressor2 {static final int BUFFER = 8192;/*** 压缩入口* 适配:* 1.压缩文件* 2.压缩文件夹** @param pathName 传入一个或者多个文件/文件夹的绝对路径 可变参数*/public void compress(String pathName, String zipFileName) {ZipOutputStream out = null;try {FileOutputStream fileOutputStream = new FileOutputStream(zipFileName);CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream,new CRC32());out = new ZipOutputStream(cos);String basedir = "";//循环遍历传入的文件或者文件夹的绝对路径的 可变参数compress(new File(pathName), out, basedir);out.close();} catch (Exception e) {throw new RuntimeException(e);}}/*** 判断传参类型:是目录还是文件* <p>* 1.如果是文件,则调用压缩文件方法* 2.如果是目录,则调用压缩目录方法* </p>** @param file* @param out* @param basedir*/private void compress(File file, ZipOutputStream out, String basedir) {if (file.isDirectory()) {System.out.println("压缩:" + basedir + file.getName());//调用压缩目录方法this.compressDirectory(file, out, basedir);} else {System.out.println("压缩:" + basedir + file.getName());//调用压缩文件方法this.compressFile(file, out, basedir);}}/*** 压缩一个目录*/private void compressDirectory(File dir, ZipOutputStream out, String basedir) {if (!dir.exists()) {System.out.println("压缩目录不存在,请核实!");return;}File[] files = dir.listFiles();for (int i = 0; i < files.length; i++) {/* 递归 */compress(files[i], out, basedir + dir.getName() + "/");}}/*** 压缩一个文件*/private void compressFile(File file, ZipOutputStream out, String basedir) {if (!file.exists()) {System.out.println("压缩文件不存在,请核实!");return;}try {BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));ZipEntry entry = new ZipEntry(basedir + file.getName());out.putNextEntry(entry);int count;byte data[] = new byte[BUFFER];while ((count = bis.read(data, 0, BUFFER)) != -1) {out.write(data, 0, count);}bis.close();} catch (Exception e) {throw new RuntimeException(e);}}/*** 压缩指定文件(特殊场景)* 文件个数限定1个** @param srcPathName*/public void compressFile(String srcPathName, String zipName) {File file = new File(srcPathName);if (!file.exists()) {throw new RuntimeException(srcPathName + "不存在!");}try {FileOutputStream fileOutputStream = new FileOutputStream(zipName);CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream,new CRC32());ZipOutputStream out = new ZipOutputStream(cos);String basedir = "";compress(file, out, basedir);out.close();} catch (Exception e) {throw new RuntimeException(e);}}public static void main(String[] args) {ZipCompressor2 zc = new ZipCompressor2();String b = "D:\\1\\";String zipName = "D:\\www.zip";// String b = "D:\\1.jpg";zc.compress(b, zipName);// zc.compress("D:\\1.jpg", "D:\\3.jpeg", "D:\\4.jpg", b);}
}

java实现zip压缩文件(同一文件夹下的多个文件夹打成一个zip包)相关推荐

  1. linux中.sql.gz文件解压,linux下tar.gz、tar、bz2、zip等解压缩、压缩命令小结

    本文介绍了linux下的压缩程式tar.gzip.gunzip.bzip2.bunzip2.compress .uncompress. zip. unzip.rar.unrar等程式,以及如何使用它们 ...

  2. java读取文件夹下的所有txt文件,java读取文件夹下文件及txt内容

    public class PositionController { // 读取txt内容 public static String txt2String(File file) { StringBuil ...

  3. python3指定目录所有excel_Python——合并指定文件夹下的所有excel文件

    前提:该文件夹下所有文件有表头且具有相同的表头. import glob # 同下 from numpy import * #请提前在CMD下安装完毕,pip install numppy impor ...

  4. python打开指定文件-python打包压缩、读取指定目录下的指定类型文件

    下面通过代码给大家介绍python打包压缩指定目录下的指定类型文件,具体代码如下所示: import os import datetime import tarfile import fnmatch ...

  5. android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件

    简介 XStream 是一个开源项目,一套简单实用的类库,用于序列化对象与 XML 对象之间的相互转换. 将 XML 文件内容解析为一个对象或将一个对象序列化为 XML 文件. 1.下载工具 xstr ...

  6. 批量上传相册,将一个文件夹下的所有图片,复制到另一个文件夹,仅给出文件夹目录

    package cn.hp.demo01;import java.io.*;/* * 批量上传相册 *将一个文件夹下的所有图片,复制到另一个文件夹 *仅给出文件夹目录*/ public class D ...

  7. windows中遍历指定文件夹下的所有子文件夹

    前面我给出了windows下面指定文件夹下面指定类型文件的遍历程序,这里,再给出遍历指定文件夹下的所有子文件夹的程序: #include "stdafx.h" #include & ...

  8. Python语言学习:创建/删除文件/文件夹、获取当前文件/文件夹路径(系统环境路径/目录)、获取当前文件夹下的所有子文件路径等代码(os系列用法)实现之详细攻略

    Python语言学习:创建/删除文件/文件夹.获取当前文件/文件夹路径(系统环境路径/目录).获取当前文件夹下的所有子文件路径等代码(os系列用法)实现之详细攻略 目录 系统环境路径的设置 1.sys ...

  9. 使用某个文件夹下的所有文件去替换另一个文件夹下及其子文件夹下存在的同名文件(Python实现)...

    值此新年即将到来之际,在这献上今年最后一篇文章. 产生这个需求是在项目的一次图标替换上,当时给了我一堆新图标要替换原来的老图标,可是原来的老图标分布在某个文件夹下的各个子文件夹下面,而新图标全是在同一 ...

最新文章

  1. docker 容器安装conposer_Docker下用composer国内镜像安装Laravel
  2. 【浅谈数据结构】《数据结构》Data Structure
  3. selenium 4_Selenium4 Alpha –期望什么?
  4. 为什么脚本执行一行就不动了_在Linux中通过expect工具实现脚本的自动交互
  5. java三个技术平台_Java的3个平台有什么区别
  6. Java 基础【01】 This 用法
  7. RMI(Remote Method Invocation)原理浅析
  8. 子慕谈设计模式系列(三)
  9. php seekdir,readdir()
  10. HTML+CSS入门学习
  11. 多个分析视角的数据多维分析图表该如何制作?
  12. 这么多年你还在怕正则吗?
  13. 开工干活累了,晚上不得找个陪玩打打游戏?我教你们用python找个人美声甜的
  14. 井冈山大学专属中秋月饼
  15. 计算机考研多少是高分,考研多少分算高分 总分500考380难吗
  16. 如何控制H5 video 只能后退(向后拖动)不能快进(向前拖动)
  17. Bugzilla的bug状态
  18. Spring框架及其特点
  19. 解决Manifest merger failed : Attribute application@appComponentFactory
  20. 【Java基础[JDK的安装与配置 (1.8及以上)]】

热门文章

  1. 你有什么相见恨晚的知识想推荐给年轻人?
  2. 这40张图送给单身程序员,情人节请一笑而过!
  3. .val()数据乱码_【目标检测数据集】PASCAL VOC制作
  4. mysql 设置 character_set_server_MySQL:简单记录character_set_server影响参数
  5. 【转载保存】Lucene7.1.0超详细的使用文档
  6. 【转载保存】Lucene 实战教程第六章 Lucene 的精确、包含、集合查询 Query 的简单使用
  7. 排序算法总结与C代码
  8. Gartner发布云产品评估报告:阿里云计算能力全球第一
  9. Hive数据如何同步到MaxCompute之实践讲解
  10. 云原生时代来袭 下一代云数据库技术将走向何方?