Java 的zip压缩和解压缩
好久没有来这写东西了,今天中秋节,有个东西想拿出来分享,一来是工作中遇到的问题,一来是和csdn问候一下,下面就分享一个Java中的zip压缩技术,代码实现比较简单,代码如下:
package com.meritit.utils.zip;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.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;/*** @function 实现把指定文件夹下的所有文件压缩为指定文件夹下指定 zip 文件&&实现把指定文件夹下的 zip 文件解压到指定目录下* @createDate:2013-09-18* @author Ysjian*/
public final class ZIPUtils {/*** 测试* * @param args* @throws IOException * @throws ZipException */public static void main(String[] args) throws ZipException, IOException {// 把E:\\Ysjian_Job\\osgistart文件夹下的所有文件压缩到 E:\\test.jar中zip("E:\\test.xlsx", "E:\\test.jar");// 把E:\\test.jar 压缩文件内的所有文件解压到 E:\\test目录下面unZip("E:\\test.jar", "E:\\test");}private ZIPUtils() {}/*** sourceFile 文件进行 zip* 格式的压缩,如果sourceFile是目录,就将sourceFile目录下所有的文件及子目录压缩,如果sourceFile是文件* ,将sourceFile文件压缩,保存为指定 .zip或者.jar 文件* * @param sourceFile*            源文件,* @param savedFile*            保存的文件,可以是.zip或者.jar形式* */public static void zip(String sourceFile, String savedFile) {ZipOutputStream zos = null;try {zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(savedFile)));File file = new File(sourceFile);@SuppressWarnings("unused")boolean zip = file.isDirectory() ? zipFile(file, file.getPath(),zos) : zipFile(file, file.getParent(), zos);} catch (FileNotFoundException e) {throw new RuntimeException("filePath is invalid-->" + savedFile, e);} finally {try {zos.closeEntry();zos.close();} catch (IOException e) {throw new RuntimeException("fail to close the ZipOutputStream",e);}}}/*** 压缩文件,利用到了递归* * @param source* @param basePath* @param zos* @throws IOException*/private static boolean zipFile(File source, String basePath,ZipOutputStream zos) {File[] files = null;if (source.isDirectory()) {files = source.listFiles();} else {files = new File[1];files[0] = source;}String path = null;byte[] buf = new byte[1024];int length = 0;BufferedInputStream bis = null;try {for (File file : files) {if (file.isDirectory()) {path = file.getPath().substring(basePath.length() + 1)+ "/";zos.putNextEntry(new ZipEntry(path));zipFile(file, basePath, zos);} else {path = file.getPath().substring(basePath.length() + 1);bis = new BufferedInputStream(new FileInputStream(file));zos.putNextEntry(new ZipEntry(path));while ((length = bis.read(buf)) > 0) {zos.write(buf, 0, length);}}}} catch (Exception e) {e.printStackTrace();} finally {if (bis != null) {try {bis.close();} catch (IOException e) {throw new RuntimeException("fail to close the ZipOutputStream", e);}}}return true;}/*** 解压 zip 文件,只能解压标准的 zip文件* * @param sourceFile*            标准的 zip 文件,不能是把 rar 的直接改为 zip 这样会出现java.io.IOException* @param targetDir*            存放的目錄* @throws ZipException* @throws IOException*/@SuppressWarnings("resource")public static void unZip(String sourceFile, String targetDir)throws ZipException, IOException {targetDir = targetDir.endsWith("//") ? targetDir : targetDir + "//";byte b[] = new byte[1024];ZipFile zipFile = null;BufferedOutputStream bos = null;zipFile = new ZipFile(new File(sourceFile));Enumeration<?> enumeration = zipFile.entries();while (enumeration.hasMoreElements()) {ZipEntry zipEntry = (ZipEntry) enumeration.nextElement();File loadFile = new File(targetDir + zipEntry.getName());if (!zipEntry.isDirectory()) {if (!loadFile.getParentFile().exists()) {loadFile.getParentFile().mkdirs();}OutputStream os = new FileOutputStream(loadFile);InputStream inputStream = zipFile.getInputStream(zipEntry);bos = new BufferedOutputStream(os);int length = 0;while ((length = inputStream.read(b)) > 0) {bos.write(b, 0, length);}}}}
}

最近工作利用了OSGi,需要在代码中手动生成jar包,也就是bundle,所以采用了这种技术去生成jar包。利用了zip压缩,将事先用eclipse生成的bundle的jar包解压出来,在向里面添加自己的文件,然后在压缩成jar。

转载于:https://www.cnblogs.com/pangblog/p/3331446.html

Java 的zip压缩和解压缩相关推荐

  1. java putnextentry_Java对zip格式压缩和解压缩

    Java对zip格式压缩和解压缩 通过使用java的相关类可以实现对文件或文件夹的压缩,以及对压缩文件的解压. 1.1 ZIP和GZIP的区别 gzip是一种文件压缩工具(或该压缩工具产生的压缩文件格 ...

  2. java.util.zip_[Java 基础] 使用java.util.zip包压缩和解压缩文件

    Java API中的import java.util.zip.*;包下包含了Java对于压缩文件的所有相关操作. 我们可以使用该包中的方法,结合IO中的相关知识,进行文件的压缩和解压缩相关操作. Zi ...

  3. java ant解压缩_java ant包中的org.apache.tools.zip实现压缩和解压缩实例详解

    java ant包中的org.apache.tools.zip实现压缩和解压缩实例详解 发布于 2020-4-7| 复制链接 摘记: java ant包中的org.apache.tools.zip实现 ...

  4. Java用ZIP格式压缩和解压缩文件

    转载:java jdk实例宝典 感觉讲的很好就转载在这保存! java.util.zip包实现了Zip格式相关的类库,使用格式zip格式压缩和解压缩文件的时候,需要导入该包. 使用zipoutputs ...

  5. java 解压与压缩代码_Java实现多文件压缩和解压缩代码详解

    Java实现多文件压缩和解压缩代码 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStre ...

  6. Java使用winrar压缩和解压缩文件

    Java使用winrar压缩和解压缩文件 2015-08-17| 发布: | 浏览: 740 |保存PDF Winrar可以使用命令行进行压缩和解压缩,如: 将D:/aa.doc 压缩为:aa.rar ...

  7. Java代码实现字符串压缩和解压缩

    在 IO流中我们一般操作文件的输出和输入,但是很少看见字符串压缩和解压缩的操作,本文中将带你了解不一般的IO流操作 目录 一.使用`gzip`进行压缩 二.使用`gzip`进行解压缩 三.使用`zip ...

  8. Linux常用命令: zip、unzip 压缩和解压缩命令

    Linux常用命令: zip.unzip 压缩和解压缩命令 zip的用法 基本用法是: zip [参数] [打包后的文件名] [打包的目录路径] 常用参数: -a 将文件转成ASCII模式 -F 尝试 ...

  9. python怎样压缩和解压缩ZIP文件

    python怎样压缩和解压缩ZIP文件(转) 有时我们需要在 Python 中使用 zip 文件,而在1.6版中,Python 就已经提供了 zipfile 模块可以进行这样的操作.不过 Python ...

最新文章

  1. jenkins页面中英文切换配置
  2. 计算机管理损坏的图像,损坏的图像(打开软件出现)解决方法
  3. 编写你的第一个 Django 应用,第 7 部分
  4. webservice用cxf发布SOAP
  5. HDU - 4734 F(x) (2013成都网络游戏,数字DP)
  6. 电感检测_几种常用的电流检测方式
  7. 解决切换场景时NGUI图集资源未释放的问题
  8. 2020年Java学习计划祝大家新年快乐
  9. OpenCV-寻找非零点cv::findNonZero
  10. mysql 权限信息存储库_springboot-security02FromDB 权限管理(用户信息和角色信息保存在数据库)详解...
  11. gcc/g++ 的参数总结(二)
  12. Android开发 使用HBuilder的缓存方法
  13. tex 表格内容换行_LaTeX:表格内换行与各种居中完美解决
  14. php 单笔转账到支付宝账户,php之支付宝转账或发红包到指定账户(提现功能)
  15. 一文读懂高频交易程序化交易和量化交易区别
  16. mysql中身份证号判断男女人数
  17. 数据采集—数据库基础及采集
  18. 蚂蚁金服缘何自研Service Mesh?
  19. 右键计算机管理打开记事本,右键菜单怎么加入“用记事本方式打开”
  20. 开源软件总体拥有成本指南

热门文章

  1. Python字符串方法用示例解释
  2. c专家编程/c陷阱_如何避免常见的初学者陷阱并像专家一样开始编码
  3. 小兵别嚣张,签名算法分析
  4. 手动部署OpenStack环境(六:出现的问题与解决方案总结)
  5. idea打开web项目之后一直闪烁
  6. 1084 Broken Keyboard
  7. (C++)A+B 输入输出练习VII 输入包含若干行,每行输入两个整数a和b,由空格分隔。 对于每组输入,输出a和b的和,每行输出后接一个空行。
  8. Java培训零基础学员必须要知道的知识点
  9. 阿里重金投数梦工场 布局PaaS动了谁的奶酪
  10. javascript面向对象技术基础(二)