版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/xiananliu/article/details/23993481

zip格式是开源的相比rar格式,zip的压缩和解压都是非常方便的,我们须要用到apache ant 项目里的 ant.jar

点击下载 :http://download.csdn.net/detail/xiananliu/7211325

先附上 解压的 方法

 /**
 * 解压zip包的内容到指定的目录下。能够处理其目录下包括子目录的情况
 * 
 * @param zipFilename
 *            要解压的zip 
 * @param outputDirectory
 *            解压后存放的目录
 */
public synchronized void unzip(String zipFilename, String outputDirectory)
throws IOException {
File outFile = new File(outputDirectory);
if (!outFile.exists()) {
outFile.mkdirs();
}
ZipFile zipFile = new ZipFile(zipFilename);
Enumeration en = zipFile.getEntries();
ZipEntry zipEntry = null;
while (en.hasMoreElements()) {
zipEntry = (ZipEntry) en.nextElement();
if (zipEntry.isDirectory()) {
// mkdir directory
String dirName = zipEntry.getName();
// System.out.println("=dirName is:=" + dirName + "=end=");
dirName = dirName.substring(0, dirName.length() - 1);
File f = new File(outFile.getPath() + File.separator + dirName);
f.mkdirs();
} else {
// unzip file
String strFilePath = outFile.getPath() + File.separator
+ zipEntry.getName();
File f = new File(strFilePath); // the codes remedified by can_do on 2010-07-02 =begin=
// /////begin/////
// 推断文件不存在的话,就创建该文件所在目录的目录
if (!f.exists()) {
String[] arrFolderName = zipEntry.getName().split("/");
String strRealFolder = "";
for (int i = 0; i < (arrFolderName.length - 1); i++) {
strRealFolder += arrFolderName[i] + File.separator;
}
strRealFolder = outFile.getPath() + File.separator
+ strRealFolder;
File tempDir = new File(strRealFolder);
// 此处使用.mkdirs()方法,而不能用.mkdir()
tempDir.mkdirs();
}
// /////end///
// the codes remedified by can_do on 2010-07-02 =end=
f.createNewFile();
InputStream in = zipFile.getInputStream(zipEntry);
FileOutputStream out = new FileOutputStream(f);
try {
int c;
byte[] by = new byte[BUFFEREDSIZE];
while ((c = in.read(by)) != -1) {
out.write(by, 0, c);
}
// out.flush();
} catch (IOException e) {
throw e;
} finally {
if(in!=null){ in.close();
}
if(out!=null){
out.close();
}}
}
} zipFile.close();
}

这段代码是我到网上找的,我的项目中用到了解压,并且在解压后出现了源文件无法删除的问题。

。。

最后一句zipFile.close() 攻克了这个问题,除了关闭输入输出流。

还要关闭这个  zipFile 对象。

详细怎么回事我也不是非常清楚

这个 zipFile 是 org.apache.tools.zip.ZipFile类型的

我找到了 java.util.zip.ZipFile 的close()方法说明:

关闭此 ZIP 文件将关闭曾经调用 getInputStream 方法返回的全部输入流。

我想大概是一样的吧。

本人愚钝请指教。

。。。。

以下是压缩的方法:

	 /**
* 压缩文件或者文件目录到指定的zip
*
* @param inputFilename
* 要压缩的文件或者目录。假设是目录的话,会将目录下的全部文件包括子目录的内容进行压缩
* @param zipFilename
* 生成的zip或者rar文件的名称
*/
public synchronized void zip(String inputFilename, String zipFilename)
throws IOException {
zip(new File(inputFilename), zipFilename);
} /**
* 压缩文件或者文件目录到指定的zip,内部调用
*
* @param inputFile
* 參数为文件类型的要压缩的文件或者目录
* @param zipFilename
* 生成的zip文件的名称
* @return void
*/
private synchronized void zip(File inputFile, String zipFilename)
throws IOException {
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
zipFilename)); try {
zip(inputFile, out, "");
} catch (IOException e) {
throw e;
} finally {
out.close();
}
} /**
* 压缩文件或者文件目录到指定的zip
*
* @param inputFile
* 參数为文件类型的要压缩的文件或者目录
* @param out
* 输出流
* @param base
* 基目录
* @return void
*/
private synchronized void zip(File inputFile, ZipOutputStream out,
String base) throws IOException {
if (inputFile.isDirectory()) {
File[] inputFiles = inputFile.listFiles();
out.putNextEntry(new ZipEntry(base + "/"));
base = base.length() == 0 ? "" : base + "/";
for (int i = 0; i < inputFiles.length; i++) {
zip(inputFiles[i], out, base + inputFiles[i].getName());
} } else {
if (base.length() > 0) {
out.putNextEntry(new ZipEntry(base));
} else {
out.putNextEntry(new ZipEntry(inputFile.getName()));
} FileInputStream in = new FileInputStream(inputFile);
try {
int c;
byte[] by = new byte[BUFFEREDSIZE];
while ((c = in.read(by)) != -1) {
out.write(by, 0, c);
}
} catch (IOException e) {
throw e;
} finally {
in.close();
}
}
}

zip的压缩解压就是这样了。谢谢您的围观

zip 的 压缩与解压的更多相关文章

  1. C# 使用原生 System.IO.Compression 实现 zip 的压缩与解压

    zip 是一个非常常见的压缩包格式,本文主要用于说明如何使用代码 文件或文件夹压缩为 zip压缩包及其解压操作, 我们采用的是 微软官方的实现,所以也不需要安装第三方的组件包. 使用的时候记得 usi ...

  2. linux 下 zip unzip压缩与解压

    注:*压缩成限.zip格式文件 常用解压缩: [root@mysql test]# unzip -o test.zip -d tmp/ 将压缩文件test.zip在指定目录tmp下解压缩,如果已有相同 ...

  3. linux下tar、zip等压缩、解压命令

    .tar解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)-------------------------- ...

  4. java.util.zip.Deflater 压缩 inflater解压 实例

    原文:java压缩解压缩类实例[转] package com.example.helloworld; import java.io.ByteArrayOutputStream; import java ...

  5. Android 打造自己的个性化应用(五):仿墨迹天气实现续--> 使用Ant实现zip/tar的压缩与解压

    上一篇中提到对于Zip包的解压和压缩需要借助Ant 实现,我经过参考了其他的资料,整理后并加上了一些自己的看法: 这里就具体地讲下如何使用Ant进行解压缩及其原因: java中实际是提供了对  zip ...

  6. 文件操作 系统备份和还原,压缩,解压 tar dump/restore

    基本操作命令: ls -a 显示指定目录下的目录和文件,包括隐藏的文件和目录 ls -l 将文件和目录详细列出来,包括文件状态,权限,拥有者,文件名,文件大小等 改变工作目录命令 cd cd .. 进 ...

  7. Linux文件压缩与解压命令

    1  .zip 格式压缩与解压 压缩命令 zip 压缩文件名 源文件 zip  -r   压缩目录名       源目录 解压命令 unzip 文件名 td@td-Lenovo-IdeaPad-Y41 ...

  8. Linux操作系统中,*.zip、*.tar、*.tar.gz、*.tar.bz2、*.tar.xz、*.jar、*.7z等格式的压缩与解压

    zip格式 压缩: zip -r [目标文件名].zip [原文件/目录名] 解压: unzip [原文件名].zip 注:-r参数代表递归 tar格式(该格式仅仅打包,不压缩) 打包:tar -cv ...

  9. Zip 压缩、解压技术在 HTML5 浏览器中的应用

    JSZip 是一款可以创建.读取.修改 .zip 文件的 javaScript 工具.在 web 应用中,免不了需要从 web 服务器中获取资源,如果可以将所有的资源都合并到一个 .zip 文件中,这 ...

随机推荐

  1. 在Android项目中使用AspectJ

    版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请表明出处:http://www.cnblogs.com/cavalier-/p/8888459.html 什么是AOP AOP是 Aspec ...

  2. Java提高篇之抽象类与接口

    接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念 ...

  3. SPI Flash(W25Q16DV) 基本操作

    读取厂家\设备 ID 发送 90H 指令,再发送 00h 的地址,然后接收即可. 代码如下: void SPIFlashReadID(int *pMID, int *pDID) { SPIFlash_ ...

  4. Spring Boot 初始化运行特定方法

    Spring Boot提供了两种 “开机自启动” 的方式,ApplicationRunner和CommandLineRunner 这两种方式的目的是为了满足,在容器启动时like执行某些方法.我们可以 ...

  5. 关于toggle事件委托的处理

    当html页面加载后,页面上需要再次动态加载的按钮等事件的绑定,我们有两种处理方案 一.再次加载后进行绑定 二.使用委托进行绑定 而toggle事件是无法直接绑定的,这时可以转化为click的事件,并 ...

  6. 清除电脑垃圾.bat

    echo.title delete cachecolor 0aecho.echo please enter any key start.....@echo offecho execuing delet ...

  7. Java事件处理机制(深入理解)

    本文是关于Java事件处理机制的梳理,以及有重点的介绍一些注意点,至于基础的概念啥的不多赘述. 一.Java事件处理机制初步介绍(看图理解) 根据下图,结合生活实际,可以得知监护人可以有多个,坏人对小 ...

  8. jquery绑定点击事件的三种写法

    一.用jquery动态绑定点击事件的写法 部分代码: <script type="text/javascript"> $(document).ready(functio ...

  9. 使用node.js进行API自动化回归测试

    概述 传统的QA自动化测试通常是基于GUI的,比如使用Selenium,模拟用户在界面上操作.但GUI测试的开发.维护成本和运行的稳定性一直是测试界的老大难问题.投入大量的人力物力开发.维护.运行,却 ...

  10. 移动端不利用HTML5和echarts开发一样可以实现大数据展示及炫酷统计系统(产品技术综合)

    一.由于项目需要进行手机看板展示设计及开发展示效果图如下: