代码如下:

package com.cn.util;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;import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.Expand;/*** 压缩文件工具类* @author sun.kai* 2016年8月14日*/
public class ZipUtil {static final int BUFFER = 8192;private static File zipFile;/*** 压缩单个或多文件方法* @param zipPath 压缩后的文件路径* @param srcPathName 要压缩的文件路径* 参数srcPathName也可以定义成数组形式,需调用方把参数封装到数组中传过来即可*/public static void compress(String zipPath,String... srcPathName) {//压缩后的文件对象zipFile = new File(zipPath);try {//创建写出流操作FileOutputStream fileOutputStream = new FileOutputStream(zipFile);CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream,new CRC32());ZipOutputStream out = new ZipOutputStream(cos);for(String srcPath:srcPathName){//创建需要压缩的文件对象File file = new File(srcPath);if (!file.exists()){throw new RuntimeException(srcPath + "不存在!");}/** (1)如果在zip压缩文件中不需要一级文件目录,定义String basedir = "";* 下面的compress方法中当判断文件file是目录后不需要加上basedir = basedir + file.getName() + File.separator;* (2)如果只是想在压缩后的zip文件里包含一级文件目录,不包含二级以下目录,* 直接在这定义String basedir = file.getName() + File.separator;* 下面的compress方法中当判断文件file是目录后不需要加上basedir = basedir + file.getName() + File.separator;* (3)如果想压缩后的zip文件里包含一级文件目录,也包含二级以下目录,即zip文件里的目录结构和原文件一样* 在此定义String basedir = "";* 下面的compress方法中当判断文件file是目录后需要加上basedir = basedir + file.getName() + File.separator;*///String basedir = file.getName() + File.separator;String basedir = "";compress(file, out, basedir);}out.close();} catch (Exception e) {throw new RuntimeException(e);}}private static void compress(File file, ZipOutputStream out, String basedir) {/* * 判断是目录还是文件 */if (file.isDirectory()) {basedir += file.getName() + File.separator;compressDirectory(file, out, basedir);} else {System.out.println("压缩:" + basedir + file.getName());compressFile(file, out, basedir);}}/*** 压缩一个目录*/private static void compressDirectory(File dir, ZipOutputStream out, String basedir) {if (!dir.exists()){return;}File[] files = dir.listFiles();for (int i = 0; i < files.length; i++) {/* 递归 */compress(files[i], out, basedir);}}/** * 压缩一个文件 */private static void compressFile(File file, ZipOutputStream out, String basedir) {if (!file.exists()) {return;}try {BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));//创建Zip实体,并添加进压缩包  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);}}/*** 解压缩 * @param sourceFile 要解压缩的文件的路径* @param destDir 解压缩后的目录路径* @throws Exception*/public static void deCompress(String sourceFile,String destDir) throws Exception{  //创建需要解压缩的文件对象File file = new File(sourceFile);if (!file.exists()){throw new RuntimeException(sourceFile + "不存在!");}//创建解压缩的文件目录对象File destDiretory  = new File(destDir);if(!destDiretory.exists()){destDiretory.mkdirs();}/** 保证文件夹路径最后是"/"或者"\"* charAt()返回指定索引位置的char值*/char lastChar = destDir.charAt(destDir.length()-1);if(lastChar!='/'&&lastChar!='\\'){//在最后加上分隔符destDir += File.separator;}unzip(sourceFile, destDir);}/*** 解压方法* 需要ant.jar*/private static void unzip(String sourceZip,String destDir) throws Exception{try{Project p = new Project();Expand e = new Expand();e.setProject(p);e.setSrc(new File(sourceZip));e.setOverwrite(false);e.setDest(new File(destDir));e.execute();}catch(Exception e){throw e;}}}

测试代码:

package com.test.test;import com.cn.util.ZipUtil;public class TestZip {public static void main(String[] args) throws Exception {String srcPathName1 = "C:/Users/sun/Desktop/test1/";String srcPathName2 = "C:/Users/sun/Desktop/test2/";String zipPath1 = "C:/Users/sun/Desktop/test1.zip";String zipPath = "C:/Users/sun/Desktop/test.zip";ZipUtil.compress(zipPath1,srcPathName1);ZipUtil.compress(zipPath,srcPathName1,srcPathName2);String sourceFile = "C:/Users/sun/Desktop/test.zip";String destDir = "C:/Users/sun/Desktop/test";ZipUtil.deCompress(sourceFile, destDir);}
}

java实现单个或多个文件的压缩、解压缩 支持zip、rar等格式相关推荐

  1. python对文件进行压缩解压缩基于zip格式

    一.python压缩模块简介 python直接通过内置压缩模块可以直接进行压缩文件的创建: 内置模块 zipfile/rarfile 完成压缩文件的操作. 二. zipfile模块基础使用 2.1 对 ...

  2. java大数据量导出csv文件并压缩

    java大数据量导出csv文件并压缩 java使用POI大数据量导出excel一般会存在以下几个问题: 一次从数据库查询出这么大数据,查询缓慢 查询数据量过大时会内存溢出 解决方案:分页查询数据,比如 ...

  3. java 压缩文件tar_使用Java API进行tar.gz文件及文件夹压缩解压缩

    在java(JDK)中我们可以使用ZipOutputStream去创建zip压缩文件,(参考我之前写的文章 使用java API进行zip递归压缩文件夹以及解压 ),也可以使用GZIPOutputSt ...

  4. java上传rar文件_java实现上传zip/rar压缩文件,自动解压

    在pom中添加解压jar依赖 4.0.0 org.springframework.boot spring-boot-starter-parent 2.1.2.RELEASE com.hf uncomp ...

  5. 使用Java API进行tar.gz文件及文件夹压缩解压缩

    在java(JDK)中我们可以使用ZipOutputStream去创建zip压缩文件,(参考我之前写的文章 使用java API进行zip递归压缩文件夹以及解压 ),也可以使用GZIPOutputSt ...

  6. Java导入,导出,多层文件夹压缩(业务复杂)

    SpringBoot项目 Zip工具类 package com.pty.bip.common.util;import java.io.*; import java.util.List; import ...

  7. Linux——tar打包文件和压缩解压缩

    1.压缩文件 gzip 文件名 压缩后的文件格式: .gz 2.解压缩文件 解压缩 .gz的压缩文件 gunzip 压缩文件名 3.tar 打包目录 tar tar命令可以用来压缩打包单文件.多个文件 ...

  8. C# 文件/文件夹压缩解压缩

    项目上用到的,随手做个记录,哈哈. 直接上代码: 1 using System; 2 using System.Data; 3 using System.Configuration; 4 using ...

  9. 文件的压缩/解压缩、打包(Linux系统)

    一.Linux系统常见的压缩指令 在Linux的环境中,压缩文件的扩展名较多,大多是:" .tar,  .tar.gz,  .tgz,  .gz,  .Z,  .bz2, *.xz &quo ...

最新文章

  1. 那些总是写“烂代码”的同学,强烈推荐你用这款IDEA插件!
  2. php 操作 redis 常用命令
  3. android: 播放音频
  4. 使用npm失败解决方案
  5. OnKeyPress事件和Javascript检测键盘输入
  6. 童家旺:如何用分表存储来提高性能
  7. 判断C语言变量名是否合法
  8. 微课|Python程序设计开发宝典(5.1.2节):嵌套函数定义2
  9. Tensorflow2.0数据类型
  10. 12306再曝漏洞,一张身份证可买两张相同火车票
  11. 编译原理第三版清华pdf_清华网络科学与网络空间研究院考研经验分享
  12. java中整数和字符串间的转换方法
  13. 锐起无盘安装图文教程
  14. 华为手机禁用省电精灵
  15. 关于神经网络算法使用场景的思考
  16. 杨绛先生70句金句,请珍藏
  17. 主流车品牌魅力指数榜别克、东风日产、一汽丰田列前三;亚航推出东盟超级应用平台 | 美通企业日报...
  18. jekins自动化部署
  19. C++/C语言申请动态空间的详解【new关键字、malloc关键字、delete和free关键字】
  20. x265各个preset对比

热门文章

  1. 柱状图折线图混合使用
  2. 谈一谈对JS闭包的理解
  3. 作为一个前端开发工程师,你会怼人吗?
  4. 怎么制作区域分布图,怎么做网点分布图
  5. AB罗克韦尔plc指示灯详解
  6. 【Java SE】数组的打印方式
  7. 哈雷haley教你如何用你的手机测试你的移动端项目
  8. 计算机表格用计算公式百分百,excel表格怎么算数据的阳性比率-计算机一级用excel表格计算增长比例该怎么算?...
  9. the win16 subsystem was unable to enter protected mode,DOSX.EXE must be in your AUTOEXEC.NT and pres
  10. 关于gvim的高级应用