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

这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);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/519887.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机操作与规范,电脑操作基本知识(精华版)

一、快速操作规程操作五招1、按“Alt”键然后用鼠标双击文件或文件夹即可快速打开其属性。2、双击程序窗口的标题栏&#xff0c;窗口可在最大化与常规之间快速变换3、按键(或)即可快速把文件或文件夹不用进“回收站”而直接删除。4、用鼠标左键拖动文件到桌面&#xff0c;即可在…

一位技术校招生在支付宝的成长笔记

哪有那么多的“逆袭”&#xff0c;唯有努力与坚持&#xff0c;机会就会在前方。 鲁直&#xff0c;1989年生&#xff0c;本科毕业于浙江工业大学&#xff0c;之后被校招进阿里巴巴。虽然&#xff0c;今年刚刚30岁&#xff0c;但他已是蚂蚁金服SOFA中间件开源负责人。 看到这个开…

NVIDIA向交通运输行业开源其自动驾驶汽车深度神经网络

NVIDIA今日宣布&#xff0c;在NVIDIA GPU Cloud (NGC)容器注册上&#xff0c;向交通运输行业开源NVIDIA DRIVE™自动驾驶汽车开发深度神经网络。 NVIDIA DRIVE已成为自动驾驶汽车开发的行业标准&#xff0c;并且被汽车制造商、卡车制造商、自动驾驶出租车公司、软件公司和大学…

java.sql.SQLException: ORA-01691: Lob 段 SONARQUBE2.SYS_LOB0000119128C00008$$ 无法通过 128 (在表空间 USERS 中

文章目录一、场景浮现1. 问题详情2. 问题描述3. 问题原因二、解决方案2.1. 查看表空间的名字及文件在哪2.2. 查询表空间使用情况2.3. 解决方法一、场景浮现 1. 问题详情 2. 问题描述 java.sql.SQLException: ORA-01691: Lob 段 SONARQUBE2.SYS_LOB0000119128C00008$$ 无法通过…

计算机2级什么时间考,全国计算机2级考试什么时间出成绩单

2019-06-20 01:27齐新伟查分时间有关成绩查询的具体事宜&#xff1a;1、全国计算机等级考试的成绩将在考后约45-90天内得到成绩(不同地区公布成绩的时间将有所差异)&#xff0c;查询方法有声讯电话(快、收费)、考点成绩单报送(慢、免费)、网上查询(部分省市开通&#xff0c;快&…

开发函数计算的正确姿势 —— 安装第三方依赖

前言 首先介绍下在本文出现的几个比较重要的概念&#xff1a; 函数计算&#xff08;Function Compute&#xff09;: 函数计算是一个事件驱动的服务&#xff0c;通过函数计算&#xff0c;用户无需管理服务器等运行情况&#xff0c;只需编写代码并上传。函数计算准备计算资源&am…

终于等到你!阿里正式向 Apache Flink 贡献 Blink 源码

阿里妹导读&#xff1a;如同我们去年12月在 Flink Forward China 峰会所约&#xff0c;阿里巴巴内部 Flink 版本 Blink 将于 2019 年 1 月底正式开源。今天&#xff0c;我们终于等到了这一刻。 阿里资深技术专家大沙&#xff0c;将为大家详细介绍本次开源的Blink主要功能和优化…

Oracle 表空间常用sql

--查询表空间使用情况 select a.tablespace_name,a.bytes / 1024 / 1024 "sum MB",(a.bytes - b.bytes) / 1024 / 1024 "used MB",b.bytes / 1024 / 1024 "free MB",round(((a.bytes - b.bytes) / a.bytes) * 100, 2) "used%"from (se…

五省竞赛计算机作品,关于征集2017年华北五省(市、自治区)及港澳台大学生计算机应用大赛河北赛区竞赛作品的通知...

原标题&#xff1a;关于征集2017年华北五省(市、自治区)及港澳台大学生计算机应用大赛河北赛区竞赛作品的通知学校各单位、各位老师们&#xff1a;为深入贯彻落实《国家中长期教育改革和发展规划纲要》(2010-2020年)和教育部《关于全面提高高等教育质量的若干意见》(教高[2012]…

Auto-Keras与AutoML:入门指南

在本教程中&#xff0c;你将学习如何使用Auto-Keras&#xff08;Google的AutoML的开源替代品&#xff09;来实现自动化机器学习和深度学习。 目前来说&#xff0c;深度学习从业者在数据集上训练神经网络时&#xff0c;主要正在尝试优化和平衡两个目标&#xff1a; 1.定义适合…

java实现遍历文件夹下的文件及文件夹

package com.gblfy.test;import java.io.File; import java.util.ArrayList; import java.util.LinkedList; import java.util.List;/*** 文件常用工具类** author gblfy* description FileUtil* date 2020/07/03 17:05*/ public class FileUtil {/*** 遍历目录下面的文件夹和文…

TensorFlow 2.0深度强化学习指南

在本教程中&#xff0c;我将通过实施Advantage Actor-Critic(演员-评论家&#xff0c;A2C)代理来解决经典的CartPole-v0环境&#xff0c;通过深度强化学习&#xff08;DRL&#xff09;展示即将推出的TensorFlow2.0特性。虽然我们的目标是展示TensorFlow2.0&#xff0c;但我将尽…

互联网诞生记: 浪成于微澜之间

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 老姜出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;“我早就预言了互联网。1975年&#xff0c;所有的技术都已经准备好了&#xff1b;1985年&#xff0c;所有的技术都应该很平常了&#xff1b;而直到199…

20丨8年哈工程计算机专业录取分数线多少,双一流211大学 哈尔滨工程大学2020年各省各专业录取分数线...

哈尔滨工程大学是国家重点大学&#xff0c;也是国家211、双一流大学&#xff0c;其最早前身是中国人民解放军军事工程学院(哈军工)&#xff0c;后面的陆续建设也是保留并深入发展了军工相关专业&#xff0c;目前以该类专业为优势和特色。2020年高考哈尔滨工程大学面向全国各省市…

java 批量为图片添加图标水印和文字水印

需求&#xff0c;给指定目录下面以.jpg结尾的文件&#xff0c;添加图标水印和文字水印 文章目录一、基础版本二、升级版本三、依赖一、基础版本 package com.gblfy.util;import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder;import…

“有趣”的投影:当PCA失效时怎么办?

目前&#xff0c;大多数的数据科学家都比较熟悉主成分分析 (Principal Components Analysis&#xff0c;PCA)&#xff0c;它是一个探索性的数据分析工具。可以这样简要的描述&#xff1a;研究人员经常使用PCA来降低维度&#xff0c;希望在他们的数据中找出有用的信息&#xff0…

线程最最基础的知识

戳蓝字“CSDN云计算”关注我们哦&#xff01;什么是线程试想一下没有线程的程序是怎么样的&#xff1f;百度网盘在上传文件时就无法下载文件了&#xff0c;得等文件上传完成后才能下载文件。这个我们现在看起来很反人性&#xff0c;因为我们习惯了一个程序同时可以进行运行多个…

特征工程自动化如何为机器学习带来重大变化

随着技术的快速发展&#xff0c;在数据科学领域中&#xff0c;包括库、工具和算法等总会不断地变化的。然而&#xff0c;一直都有这么一个趋势&#xff0c;那就是自动化水平不断地提高。 近些年来&#xff0c;在模型的自动化选择和超参数调整方面取得了一些进展&#xff0c;但…

工作组访问不到别人的计算机,众果搜的博客

常见问题&#xff1a;A 在网上邻居列表中找不到目标计算机。B 在网上邻居列表能找到&#xff0c;但却访问不了。C 以UNC路径能访问&#xff0c;但在网上邻居列表中却找不到。1、网上邻居列表的维护依赖于浏览服务(Computer Browers)&#xff0c;计算机通过广播方式登记到浏览器…

java 实现压缩zip的几种方案

需求&#xff0c;将指定目录下的文件及文件夹压缩成一个指定赔案号为名称&#xff0c;以".zip"结尾的压缩包提供客户下载。 package com.gblfy.util;import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.Fil…