在使用zip格式压缩、解压缩时, 压缩可以使用ZipEntry类和ZipOutPutStream类;解压缩可以使用ZipEntry类和ZipInPutStream类

ZipEntry对象:“/”结尾,则为文件夹,否则为文件。

package com.web.test;import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;public class TestZiP {/** 文件压缩* files:要压缩的文件,以文件名数组的形式传参* destZip:压缩之后zip文件所存在的目录,需要"D:\\"或"D:\\test\"格式* */public static void zip(String[] files,String destZip){FileOutputStream fos =  new FileOutputStream(destZip);BufferedOutputStream bos = new BufferedOutputStream(fos);ZipOutputStream zos = new ZipOutputStream(bos);/*循环读取文件,压缩到zip中*/BufferedInputStream bis = null;FileInputStream fis = null;try {for (int i = 0; i < files.length; i++) {String file = files[i];fis = new FileInputStream(file);bis = new BufferedInputStream(fis);/*获取文件名,创建条目并添加到zip中*/File f = new File(file);ZipEntry z1 = new ZipEntry(f.getName());zos.putNextEntry(z1);/*读取文件中的字节信息,压入条目*/int tmp = -1;while((tmp = bis.read()) != -1){/*写入到目标zip中*/zos.write(tmp);}//todo 这里要关闭流哦}} catch (IOException e) {e.printStackTrace();}finally{try {zos.closeEntry();} catch (IOException e) {e.printStackTrace();}try {bis.close();} catch (IOException e) {e.printStackTrace();}try {fis.close();} catch (IOException e) {e.printStackTrace();}} try {zos.close();} catch (IOException e) {e.printStackTrace();}try {bos.close();} catch (IOException e) {e.printStackTrace();}try {fos.close();} catch (IOException e) {e.printStackTrace();}}  /** 文件解压缩* zipfile:要解压缩的zip文件* destpath:解压后文件所放的目录,需要"D:\\"或"D:\\test\"格式* */public static void unzip(String zipfile,String destpath) throws FileNotFoundException,IOException{/*String   zipfile = "C:\\Users\\shitb\\Desktop\\jacob_1.9.zip";String destpath = "D:\\test\\";*/FileInputStream fis = new FileInputStream(zipfile);ZipInputStream zis = new ZipInputStream(fis);ZipEntry z1 = null;while((z1 = zis.getNextEntry()) != null){if (z1.isDirectory()) {File f = new File("D:\\"+z1.getName());f.mkdirs();}else {String fileName = z1.getName();FileOutputStream fos = new FileOutputStream(destpath+fileName);int tmp = -1;while((tmp = zis.read()) != -1){/*写入到目标文件中*/fos.write(tmp);}zis.closeEntry();fos.close();}}zis.close();}/** 目录压缩* zipFileName:压缩后zip文件的路径* inputFile:需要压缩的源目录;* */public void zip(String zipFileName,String inputFile) throws IOException{File file = new File(inputFile);FileOutputStream fos = new FileOutputStream(zipFileName);ZipOutputStream out = new ZipOutputStream(fos);zipDir(out,file,"");out.close();}/**递归遍历子目录和文件,进行压缩* */private void zipDir(ZipOutputStream out, File file, String base) throws IOException {if (file.isDirectory()) {File[] files = file.listFiles();out.putNextEntry(new ZipEntry(base+"/"));base = base.length()==0?"":base+"/";for (int i = 0; i < files.length; i++) {/*进行递归*/zipDir(out,files[i], base+files[i].getName());}}else {out.putNextEntry(new ZipEntry(base));FileInputStream fis = new FileInputStream(file);int len = 0;while((len = fis.read()) != -1){/*写入到目标zip中*/out.write(len);}fis.close();}}/** 解压缩目录* zipFileName:需要解压缩的zip文件* outputDirectory:解压缩后文件所放路径* */public void unzipDir(String zipFileName,String outputDirectory) throws IOException{FileInputStream fis = new FileInputStream(zipFileName);ZipInputStream zis = new ZipInputStream(fis);ZipEntry zipEntry;while((zipEntry = zis.getNextEntry()) != null){if (zipEntry.isDirectory()) {String name = zipEntry.getName();name = name.substring(0,name.length()-1);File f = new File(outputDirectory+File.separator+name);f.mkdir();}else {File f = new File(outputDirectory+File.separator+zipEntry.getName());f.createNewFile();FileOutputStream fos = new FileOutputStream(f);int len = 0;while((len = zis.read()) != -1){/*写入到目标文件中*/fos.write(len);}fos.close();}}zis.close();}
}

ZipEntry实现文件解压缩与目录解压缩相关推荐

  1. tar解压单个文件到特定目录_如何解压缩文件到特定或不同的目录在Linux

    tar实用程序是可以用来在Linux系统上创建一个备份实用程序之一. 它包括许多选项,可以使用它们来指定要实现的任务. 提取Linux tar文件不同或新的目录 有一件事要明白,你可以提取tar文件到 ...

  2. java实现单个或多个文件的压缩、解压缩 支持zip、rar等格式

    代码如下: package com.cn.util;import java.io.BufferedInputStream; import java.io.File; import java.io.Fi ...

  3. 对rar文件的解压缩,对zip文件的压缩与解压缩

    一.对rar文件的解压缩 1.maven <dependency><groupId>com.github.junrar</groupId><artifactI ...

  4. Linux命令(9)—— 文件的压缩与解压缩

    .gz..bz2..zip文件均可以在linux操作系统下进行解压缩和压缩 tar命令 适用于 .gz..bz2类型文件 tar命令有很多选项 选项 作用 -c 创建出你要打包的文件 -j 压缩或解压 ...

  5. Linux下文件的压缩、解压缩、打包以及提取

    文章目录 Linux下文件的压缩.解压缩.打包以及提取 一.单个文件的解压缩 1.压缩文件: 2.文件的压缩 3.压缩文件的查看: 4.文件的解压:gunzip [选项] 文件名 二.多个文件的打包和 ...

  6. C# 文件的压缩与解压缩

    依赖:.NET Framework 4.5及以上,引用 - 添加引用 - 程序集 System.IO.Compression System.IO.Compression.FileSystem ---- ...

  7. tar.gz文件怎么解压缩_如何解压缩tar.gz文件

    tar.gz文件怎么解压缩 如果您使用开源软件,则有时可能会遇到.tar文件. 开源tar存档实用程序自1979年以来一直存在,因此它在POSIX世界中确实无处不在. 它的目的很简单:它将一个或多个文 ...

  8. linux 无法解压文件系统,带解压缩的Linux解压缩列表无法提取所有匹配的文件

    我在Linux上有一个zip压缩文件,每天加载约20个带有日期(格式为yyyymmdd)的文件名. 我需要提取选定一天的所有文件,所以我检查,如果他们是在存档带解压缩的Linux解压缩列表无法提取所有 ...

  9. Linux下文件的压缩与解压缩

    Linux下文件的压缩与解压缩与Windows环境下有较大的区别,在Windows下只需要安装类似Winrar工具就能解压缩大部分文件,而在Linux命令行下每一种文件都有不同的压缩和解压缩方法. 使 ...

最新文章

  1. python【蓝桥杯vip练习题库】BASIC-19完美的代价(贪心算法)
  2. java 对线程进行事务控制_Java 多线程事务回滚 ——多线程插入数据库时事务控制...
  3. 探索性数据分析(EDA)-不要问如何,不要问什么
  4. cancase vector_基于Vector总线设备的CAN总线测试方法概述
  5. python手机编译器可以干什么_世界上最好的Python编辑器是什么?
  6. 小鹏全新中大型SUV谍照曝光,智能驾驶+纯电SUV+睡眠舱?期待值拉满
  7. python程序打包_python之程序打包
  8. Mybatis异常There is no getter for property named ‘XXX‘ in ‘class java.lang.String‘
  9. 超市收银系统-Java Swing版
  10. angular 更新表单值的两种方法: setvalue,patchvalue
  11. 聚合支付、第四方支付有哪些平台?
  12. 面试常见简单编程题目
  13. JAVA动物园管理系统计算机毕业设计Mybatis+系统+数据库+调试部署
  14. 选择服务器托管时应该注意什么?
  15. 学习笔记-Wood‘s anomalies
  16. 微信小程序换行 br 无效解决方法
  17. pp模块常用表 sap_SAP 常用表 MM PP SD FICO PM PS QM WM 等
  18. sql删除数据的3种方法
  19. 关于黑马视频String 与int之间相互转化
  20. ubuntu中打开出现闪退_如何解决ubuntu软件中心闪退

热门文章

  1. 过勇 清华计算机系,16位清华学霸的简历—比你牛的人还比你努力,膝盖已跪碎...
  2. Python优化算法02——遗传算法
  3. ACM--博弈论入门--几种博弈游戏类型+题集
  4. MAB建模规范-Naming Conventions命名规范
  5. MySQL-使用UUID_SHORT( ) 的问题
  6. Ubuntu无法连接网络?
  7. Linux操作系统安全(一)
  8. 学习ARM开发(4)
  9. 韩顺平Oracle笔记
  10. 通过MACE在Android手机上部署深度学习模型