这里写了个工具类,可以实现文件的压缩和解压功能。

package com.cntaiping.tpi.common.utils;import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.channels.FileChannel;
import java.util.Enumeration;
import java.util.zip.ZipOutputStream;import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;public class ZipUtils {/*** zip解压* * @param zipfile*            File 需要解压缩的文件* @param descDir*            String 解压后的目标目录* @throws IOException */public static void unZipFiles(java.io.File zipfile, String descDir) throws IOException{File pathFile = new File(descDir);if (!pathFile.exists()){pathFile.mkdirs();}ZipFile zip = new ZipFile(zipfile);for (Enumeration entries = zip.getEntries(); entries.hasMoreElements();){ZipEntry entry = (ZipEntry) entries.nextElement();String zipEntryName = entry.getName();InputStream in = zip.getInputStream(entry);String outPath = (descDir + zipEntryName).replaceAll("\\*", "/");//获取当前file的父路径,这才是文件夹File file = new File(outPath.substring(0, outPath.lastIndexOf('/')));// 判断路径是否存在,不存在则创建文件路径if (!file.exists()){file.mkdirs();}// 判断文件全路径是否为文件夹,如果是上面已经上传,不需要解压if (new File(outPath).isDirectory()){continue;}OutputStream out = new FileOutputStream(outPath);byte[] buf1 = new byte[1024];int len;while ((len = in.read(buf1)) > 0){out.write(buf1, 0, len);}in.close();out.close();}}/*** 压缩指定的单个或多个文件,如果是目录,则遍历目录下所有文件进行压缩* @param zipFileName ZIP文件名包含全路径* @param files  文件列表*/public static void createZip(String zipFileName, File files)   throws Exception {ZipOutputStream zipOut = null;FileOutputStream fileOut = null;try {fileOut = new FileOutputStream(zipFileName);zipOut = new ZipOutputStream(fileOut);if (null != files) {zip(zipOut, files, files.getName());}zipOut.close(); // 输出流关闭} catch (Exception e) {e.printStackTrace();throw e;} finally{if(null!=zipOut){zipOut.close();}if(null!=fileOut){fileOut.close();}}}/*** 执行压缩* @param out ZIP输入流* @param f   被压缩的文件* @param base  被压缩的文件名*/private static void zip(ZipOutputStream out, File f, String base)throws Exception { // 方法重载FileInputStream in = null;BufferedInputStream bi = null;try {if (f.isDirectory()) {// 压缩目录File[] fl = f.listFiles();if (fl.length == 0) {out.putNextEntry(new ZipEntry(base + "/")); // 创建zip实体}for (int i = 0; i < fl.length; i++) {zip(out, fl[i], base + "/" + fl[i].getName()); // 递归遍历子文件夹}} else { // 压缩单个文件out.putNextEntry(new ZipEntry(base)); // 创建zip实体in = new FileInputStream(f);bi = new BufferedInputStream(in);byte[] bufs = new byte[1024 * 10];int read = 0;while ((read = bi.read(bufs, 0, 1024 * 10)) != -1) {out.write(bufs, 0, read);}out.closeEntry(); // 关闭zip实体}} catch (Exception e) {e.printStackTrace();throw e;} finally {if (null != bi) {bi.close();}if (null != in) {in.close();}}}/*** 获取文件大小  单位为字节* @param filePath* @return* @throws Exception*/public static long getFileSize(String filePath) throws Exception{FileChannel fc= null;FileInputStream fis=null;long fileSize=0;try {File f= new File(filePath);if (f.exists() && f.isFile()){fis= new FileInputStream(f);fc= fis.getChannel();fileSize=fc.size();}} catch (Exception e) {e.printStackTrace();throw e;} finally {if(null!= fis){fis.close();}if (null!=fc){fc.close();} }return fileSize;}
}

java代码实现文件或文件夹的压缩和解压相关推荐

  1. Linux下文件(文件夹)的压缩和解压

    前言 在linux下,当我们上传一个较大的文件或者要安装一个软件(如tomcat.mysql等)时,我们需要先将官网下载的压缩包在linux服务器上进行解压,再进行安装.如果是由程序包生成的一个目录内 ...

  2. Java代码输出到txt文件(申请专利贴源码的必备利器)

    最近公司在申请专利,编写不少文档,项目的代码量实在是过于庞大.如果一个一个的复制粘贴虽然能够完成,但是对于程序员而言实在没有这个必要.shell或者python就能解决这个问题.由于我个人对于shel ...

  3. eclipse编译java项目class文件_动态编译 Java 代码以及生成 Jar 文件

    导读: 最近在看 Flink 源码的时候发现到一段实用的代码,该代码实现了 java 动态编译以及生成 jar 文件.将其进行改进后可以应用到我们的平台上,实现在平台页面上编写 java 代码语句,提 ...

  4. Hadoop环境下用java代码实现hdfs远程文件的上传和下载

    Hadoop环境下用java代码实现hdfs远程文件的上传和下载 文章目录 Hadoop环境下用java代码实现hdfs远程文件的上传和下载 一.新建maven工程 二.文件的上传 三.文件的下载 四 ...

  5. java压缩和解压流,实现文件压缩和解压,代码都有注释

    压缩和解压流 压缩文件: ZipOutputStream 常用方法 方法名 介绍 ZipOutputStream(OutputStream out) 构造方法:创建新的ZIP输出流 public vo ...

  6. python调用程序压缩文件_Python实现文件压缩和解压的示例代码

    大家可能都熟悉.zip格式的文件.它可以把多个文件,压缩成一个文件.这在网络上传输时很有用,而且节省硬盘空间. 接下来,我们使用Python实现压缩和解压. 读取ZIP文件信息 要读取ZIP文件的内容 ...

  7. JAVA 7z Seven Zip 压缩和解压文件

    JAVA 7z Seven Zip 压缩和解压文件 7-Zip是基于GNU LGPL协议发布的软件,通过全新算法使压缩比率大幅提升 本文主要讲解通过JAVA方式把文件压缩成7z文件和对7z文件进行解压 ...

  8. linux 压缩文件夹bz,Linux下tar、bz、gz等压缩包的压缩和解压

    Linux下用户经常需要备份计算机系统中的数据,为了节省存储空间,常常将备份文件进行压缩存储,一般可以节约50-90%的存储空间,本文是对压缩和解压命令的大致总结 .tar.gz 或 .tgz 解压: ...

  9. android文件压缩库,Android文件压缩和解压

    Android文件压缩和解压 Java代码 package com.maidong.utils; import java.io.BufferedInputStream; import java.io. ...

最新文章

  1. linux服务器打包命令,linux 打包命令tar(主要用于服务器之间迁移资源文件)
  2. 感恩有你,链客一周年!
  3. CSP认证 201503-3 节日[C++题解]:模拟、枚举、日期题、日期模板题
  4. python non utf 8_Python 一个关于字符编码的诡异问题(Non-UTF-8 code starting with '\xe5')...
  5. linux java串口读写权限_解决linux下java读取串口之权限问题 No permission to create lock file. | 学步园...
  6. abaqus dat文件 matlab_提升Abaqus求解效率的七种武器
  7. poatman32位下载_Postman.dll下载|Postman.dll下载官方版【32位|64位】-太平洋下载中心...
  8. 内是不是半包围结构_什么是结构化面试、无领导小组讨论、结构化小组面试?教你快速搞懂国考面试三大形式。...
  9. 单机数据库,集群数据库,分布式数据库的概念和比较
  10. 引入jackson-dataformat-xml的影响
  11. 最新WIN10系统封装教程2019系列(七)——封装
  12. 最新章节 第238章 超级计算机的安排,第238章 黄花大闺女
  13. 浩辰CAD给排水2021安装教程
  14. 为服务器选择固态硬盘的一个优点和缺点
  15. 服务器插在显示屏上不亮,主机正常运行,但显示屏不亮,我将教您如何自行解决!...
  16. Oracle PL/SQL 源代码加密实战
  17. 计算机网络基础的五个层,计算机网络基础(五) 运输层
  18. 【MSP430】基于MSP430G2553的超声波测距仪
  19. 第一章 人机交互概述
  20. 「Pygame经典合集」​​​​​​终极 大招:让你玩儿到爽

热门文章

  1. 利用google closure依赖工具配置
  2. 显摆一下,自己的博客被推荐为最佳博客之一了
  3. dicom 胶片排版打印
  4. matlab置信区间,置信区间(Confidence Interval)
  5. 澳门大学研究生计算机专业含金量,澳门大学的研究生院怎么样?什么专业比较好?...
  6. ZED2相机标定--双目、IMU、联合标定
  7. Emboss的几个有用的小程序
  8. C语言——再探指针之间的传递
  9. MassGrid(MGD)双周报第29期(4.13-4.26)
  10. 梯度下降法和随机梯度下降,批量梯度下降法,小批量梯度下降(SGD,MGD,BMGD)