zip 的 压缩与解压
版权声明:本文为博主原创文章,未经博主同意不得转载。 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 的 压缩与解压的更多相关文章
- C# 使用原生 System.IO.Compression 实现 zip 的压缩与解压
zip 是一个非常常见的压缩包格式,本文主要用于说明如何使用代码 文件或文件夹压缩为 zip压缩包及其解压操作, 我们采用的是 微软官方的实现,所以也不需要安装第三方的组件包. 使用的时候记得 usi ...
- linux 下 zip unzip压缩与解压
注:*压缩成限.zip格式文件 常用解压缩: [root@mysql test]# unzip -o test.zip -d tmp/ 将压缩文件test.zip在指定目录tmp下解压缩,如果已有相同 ...
- linux下tar、zip等压缩、解压命令
.tar解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)-------------------------- ...
- java.util.zip.Deflater 压缩 inflater解压 实例
原文:java压缩解压缩类实例[转] package com.example.helloworld; import java.io.ByteArrayOutputStream; import java ...
- Android 打造自己的个性化应用(五):仿墨迹天气实现续--> 使用Ant实现zip/tar的压缩与解压
上一篇中提到对于Zip包的解压和压缩需要借助Ant 实现,我经过参考了其他的资料,整理后并加上了一些自己的看法: 这里就具体地讲下如何使用Ant进行解压缩及其原因: java中实际是提供了对 zip ...
- 文件操作 系统备份和还原,压缩,解压 tar dump/restore
基本操作命令: ls -a 显示指定目录下的目录和文件,包括隐藏的文件和目录 ls -l 将文件和目录详细列出来,包括文件状态,权限,拥有者,文件名,文件大小等 改变工作目录命令 cd cd .. 进 ...
- Linux文件压缩与解压命令
1 .zip 格式压缩与解压 压缩命令 zip 压缩文件名 源文件 zip -r 压缩目录名 源目录 解压命令 unzip 文件名 td@td-Lenovo-IdeaPad-Y41 ...
- Linux操作系统中,*.zip、*.tar、*.tar.gz、*.tar.bz2、*.tar.xz、*.jar、*.7z等格式的压缩与解压
zip格式 压缩: zip -r [目标文件名].zip [原文件/目录名] 解压: unzip [原文件名].zip 注:-r参数代表递归 tar格式(该格式仅仅打包,不压缩) 打包:tar -cv ...
- Zip 压缩、解压技术在 HTML5 浏览器中的应用
JSZip 是一款可以创建.读取.修改 .zip 文件的 javaScript 工具.在 web 应用中,免不了需要从 web 服务器中获取资源,如果可以将所有的资源都合并到一个 .zip 文件中,这 ...
随机推荐
- 控制台安装跟检测Microsoft.Net Framework
1.检测 每一个版本的.Net Framework的安装过程都会在Windows目录下的\Microsoft.NET\Framework目录中生成一个子目录(安装目录). 比如说,假设Windows目 ...
- How do I close a single buffer (out of many) in Vim?
I open several files in Vim by, for example, running vim a/*.php which opens 23 files. I then make m ...
- Linux将未挂载的磁盘挂载到目录
1.找的未挂载磁盘fdisk -l2.格式化mkfs -t ext4 /dev/xvdc3.挂载目录mount /dev/xvdc /data4.开机启动vi /etc/fstab/dev/xvdc ...
- ServletConfig与ServletContext对象详解
一.ServletConfig对象 在Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数.(配置在某个servlet标签或者整个w ...
- 通过jQuery制作电子时钟表的代码
源码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <titl ...
- blfs(systemv版本)学习笔记-编译安装sudo并创建普通用户配置sudo权限
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! blfs书中sudo的安装配置章节:http://www.linuxfromscratch.org/blfs/view/8.3/ ...
- 使用CSS如何解决inline-block元素的空白间距
早上在博客中有人提了这样一个问题:“li元素inline-block横向排列,出现了未知间隙”,我相信大家在写页面的时候都遇到过这样的情况吧. 我一般遇到这情况都会把li浮动起来,这样就没有间隙.但是 ...
- 访问WEB-INF下的jsp页面
访问web-inf下的jsp文件, 1)使用springMVC,一般都会使用springMVC的视图解析器,大概会这样配置 <!--jsp视图解析器--> <bean class ...
- 【工具相关】Web-Sublime Text2-安装插件HTMLPrettify
一,打开Sublime Text2---->Preferences--->Browse Packages.--->查看Sublime Text2已经有的插件.如图所示. 二,在网上下 ...
- 安卓开发_WebView设置打开网页缩放问题
之前实现打开网页的方式,测试后,发现不能够对网页进行缩放操作,这对部分网页来说是十分不便的, 百度了一下解决方案 其实只需要加几行代码就可以实现网页缩放操作 settings.setUseWideVi ...