文章目录

  • 压缩成.zip
  • 解压.zip

压缩成.zip

代码如下:

/*** 压缩成ZIP** @param srcDir           压缩文件夹路径* @param out              压缩文件输出流* @throws RuntimeException 压缩失败会抛出运行时异常*/public static void toZip(String srcDir, OutputStream out) throws RuntimeException {long start = System.currentTimeMillis();ZipOutputStream zos = null;try {zos = new ZipOutputStream(out);File sourceFile = new File(srcDir);compress(sourceFile, zos, sourceFile.getName(), false);long end = System.currentTimeMillis();System.out.println("压缩完成,耗时:" + (end - start) + " ms");} catch (Exception e) {throw new RuntimeException("zip error from ZipUtils", e);} finally {if (zos != null) {try {zos.close();} catch (IOException e) {e.printStackTrace();}}}
}/*** 递归压缩方法** @param sourceFile       源文件* @param zos              zip输出流* @param name             压缩后的名称* @param KeepDirStructure 是否保留原来的目录结构,true:保留目录结构;*                         <p>*                         false:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败)* @throws Exception*/
private static void compress(File sourceFile, ZipOutputStream zos, String name,boolean KeepDirStructure) throws Exception {byte[] buf = new byte[BUFFER_SIZE];if (sourceFile.isFile()) {// 向zip输出流中添加一个zip实体,构造器中name为zip实体的文件的名字zos.putNextEntry(new ZipEntry(name));// copy文件到zip输出流中int len;FileInputStream in = new FileInputStream(sourceFile);while ((len = in.read(buf)) != -1) {zos.write(buf, 0, len);}// Complete the entryzos.closeEntry();in.close();} else {File[] listFiles = sourceFile.listFiles();if (listFiles == null || listFiles.length == 0) {// 需要保留原来的文件结构时,需要对空文件夹进行处理if (KeepDirStructure) {// 空文件夹的处理zos.putNextEntry(new ZipEntry(name + "/"));// 没有文件,不需要文件的copyzos.closeEntry();}} else {for (File file : listFiles) {// 判断是否需要保留原来的文件结构if (KeepDirStructure) {// 注意:file.getName()前面需要带上父文件夹的名字加一斜杠,// 不然最后压缩包中就不能保留原来的文件结构,即:所有文件都跑到压缩包根目录下了compress(file, zos, name + "/" + file.getName(), KeepDirStructure);} else {compress(file, zos, file.getName(), KeepDirStructure);}}}}}

测试验证代码:

/*** 测试打包本地的Navicat,输出为zip文件* @throws Exception*/
@Test
public void test() throws Exception {//Navicat路径String inDir = "E:\\developer\\Navicat";//打包后输出路径String outDir = "E:\\developer\\NavicatZip\\Navicat.zip";OutputStream fileOutputStream = new FileOutputStream(new File(outDir));ZipUtils.toZip(inDir, fileOutputStream);
}

打包前后的文件如下:

解压.zip

代码如下:

/*** 解压zip文件到指定目录* @param fileZip* @param path_to_dest* @throws IOException*/
public static void readZip(String fileZip,String path_to_dest) throws IOException {try (FileInputStream fis = new FileInputStream(fileZip);ZipInputStream zis =new ZipInputStream(new BufferedInputStream(fis))) {ZipEntry entry;// 从ZipInputStream读取每个条目,直到没有// 发现更多条目,返回值为空// getNextEntry()方法。while ((entry = zis.getNextEntry()) != null) {System.out.println("Unzipping: " + entry.getName());int size;byte[] buffer = new byte[2048];File fileOut = new File(path_to_dest+"\\"+entry.getName());try (FileOutputStream fos =new FileOutputStream(fileOut);BufferedOutputStream bos =new BufferedOutputStream(fos, buffer.length)) {while ((size = zis.read(buffer, 0, buffer.length)) != -1) {bos.write(buffer, 0, size);}bos.flush();}}} catch (IOException e) {e.printStackTrace();}
}

测试验证代码:

/*** 测试解压本地zip文件* @throws Exception*/
@Test
public void readZip() throws Exception {//解压后路径String path_to_dest = "E:\\developer\\NavicatUnzip";//zip文件路径String fileZip = "E:\\developer\\NavicatZip\\Navicat.zip";ZipUtils.readZip(fileZip, path_to_dest);
}

解压前后的文件如下:

Java把文件压缩成.zip压缩包和解压.zip压缩包(ZipOutputStream、ZipInputStream)相关推荐

  1. java 把文件压缩成zip文件

    ackage org.fh.util;import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStr ...

  2. Windows中将文件压缩成linux支持的tar.gz格式的压缩包

    场景 CentOS7的服务器,本机是Windows的系统,需要从Windows上将文件打成压缩包 然后上传到linux服务器上. 如果直接在Windows上将文件打成zip或者rar这种的压缩文件的话 ...

  3. Spring Boot 实现将多个MinIO文件压缩成压缩包并下载至本地

    1 Maven依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all< ...

  4. kettle将多个文件压缩_如何使用WinRAR将一个大文件压缩成多个小的压缩包

    目录 1.使用WinRAR将一个大文件压缩成多个小的压缩包 2.使用WinRAR将多个小的压缩包,解压/合并成一个大文件 3.结尾 / 在现实生活中,受文件大小的限制,在传输的过程往往出现困难,如:邮 ...

  5. 如何使用WinRAR将一个大文件压缩成多个小的压缩包

    目录 1.使用WinRAR将一个大文件压缩成多个小的压缩包 2.使用WinRAR将多个小的压缩包,解压/合并成一个大文件 3.结尾 推荐阅读(单击下方即可跳转): 如何使用7-Zip将一个大文件压缩成 ...

  6. 使用java iTest实现PDF大文件压缩——将文件过大的图片PDF文件压缩成小一些的图片PDF文件

    一.需求 项目中需要将文件大小过大的PDF文件,压缩成小PDF文件.通过iText的API,可以实现此需求.在保证文件不失真的前提下,将PDF大文件压缩成小文件. 二.代码 import com.it ...

  7. C#利用自带的ZipFile压缩和解压zip文件,超级简单

    ZipFile类是.NET Framework 4.5发布的一个C#压缩文件和解压zip文件的一个类库,它支持.NET Framework 4.5以上版本,包括.NET Core1.0和.NET5以上 ...

  8. Java多文件压缩下载解决方案

    Java多文件压缩下载解决方案 需求: 会员运营平台经过改版后页面增加了许多全部下载链接,上周上线比较仓促,全部下载是一个直接下载ZIP压缩文件的链接,每个ZIP压缩文件都是由公司运营人员将页面需要下 ...

  9. java mp3文件压缩_java实现文件压缩

    java实现文件压缩:主要是流与流之间的传递 代码如下: package com.cst.klocwork.service.zip; import java.io.File; import java. ...

最新文章

  1. python文本分类评价指标 top1如何计算_python – Keras:如何计算多标签分类的准确......
  2. linux7.3搭建dns,Centos7.3搭建DNS服务器--BIND
  3. 车品觉 | 大数据的价值:找到别人的“集体智慧”
  4. as常用固定搭配_英语考试干货!205个常用介词固定搭配
  5. “@react-navigation/native“).createNavigatorFactory) is not a function.
  6. 入门第十一课 Python语句的嵌套
  7. Vue如何循环提取对象数组中的值
  8. python-packaging 命令行脚本
  9. php 解析lrc文件格式,PHP - 四级单词lrc文件解析为txt
  10. Linux之df命令
  11. 基于内容的图像检索概述
  12. spring mvc 自定义编辑器
  13. 多个Excel文件合并成一个文件
  14. Java-Lambda表达式第一篇认识Lambda表达式
  15. Linux系统镜像源替换
  16. android触摸屏原理,智能手机触摸屏的工作原理是如何的
  17. 56: Recv failure: Connection was reset和55错误解决办法
  18. Ubuntu16.04下安装QQ的完整操作记录(经验证可用)
  19. 单细胞测序数据下载和预处理
  20. “追梦五年”主题征文『51CTO五周年庆』

热门文章

  1. 湖仓一体(Lakehouse)是什么?
  2. 记录2017/9/7趋势科技笔试题
  3. Win11无线适配器或访问点有问题怎么解决?
  4. 认识三大数据库:知网、维普、万方
  5. Jira使用简介 HP ALM使用简介
  6. 安恒6月赛部分做题记录
  7. web综合 限时秒杀效果的制作
  8. 肖特基二极管与普通二极管的区别
  9. SCCM2012软件分发
  10. 土地资源管理就业怎么这么难_土地资源管理就业前景怎么样