commons-compress操作zip文件(压缩和解压缩)

commons-compress操作zip文件(压缩和解压缩) 有需要的同学可参考一下。

Apache Commons Compress是一个压缩、解压缩文件的类库。

  可以操作ar, cpio, Unix dump, tar, zip, gzip, XZ, Pack200 and bzip2格式的文件,功能比较强大。

  在这里写两个用Commons Compress把文件压缩成zip和从zip解压缩的方法。

  直接贴上工具类代码。

 

 代码如下 复制代码

package cn.luxh.utils;

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 org.apache.commons.compress.archivers.ArchiveEntry;

import org.apache.commons.compress.archivers.zip.Zip64Mode;

import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;

import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;

import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;

 

 

/**

* Zip文件工具类

* @author Luxh

*/

public class ZipFileUtil {

 

/**

* 把文件压缩成zip格式

* @param files 需要压缩的文件

* @param zipFilePath 压缩后的zip文件路径 ,如"D:/test/aa.zip";

*/

public static void compressFiles2Zip(File[] files,String zipFilePath) {

if(files != null && files.length >0) {

if(isEndsWithZip(zipFilePath)) {

ZipArchiveOutputStream zaos = null;

try {

File zipFile = new File(zipFilePath);

zaos = new ZipArchiveOutputStream(zipFile);

//Use Zip64 extensions for all entries where they are required

zaos.setUseZip64(Zip64Mode.AsNeeded);

 

//将每个文件用ZipArchiveEntry封装

//再用ZipArchiveOutputStream写到压缩文件中

for(File file : files) {

if(file != null) {

ZipArchiveEntry zipArchiveEntry = new ZipArchiveEntry(file,file.getName());

zaos.putArchiveEntry(zipArchiveEntry);

InputStream is = null;

try {

is = new FileInputStream(file);

byte[] buffer = new byte[1024 * 5]; 

int len = -1;

while((len = is.read(buffer)) != -1) {

//把缓冲区的字节写入到ZipArchiveEntry

zaos.write(buffer, 0, len);

}

//Writes all necessary data for this entry.

zaos.closeArchiveEntry(); 

}catch(Exception e) {

throw new RuntimeException(e);

}finally {

if(is != null) 

is.close();

}

 

}

}

zaos.finish();

}catch(Exception e){

throw new RuntimeException(e);

}finally {

try {

if(zaos != null) {

zaos.close();

}

} catch (IOException e) {

throw new RuntimeException(e);

}

}

 

}

 

}

 

}

 

/**

* 把zip文件解压到指定的文件夹

* @param zipFilePath zip文件路径, 如 "D:/test/aa.zip"

* @param saveFileDir 解压后的文件存放路径, 如"D:/test/"

*/

public static void decompressZip(String zipFilePath,String saveFileDir) {

if(isEndsWithZip(zipFilePath)) {

File file = new File(zipFilePath);

if(file.exists()) {

InputStream is = null;

//can read Zip archives

ZipArchiveInputStream zais = null;

try {

is = new FileInputStream(file);

zais = new ZipArchiveInputStream(is);

ArchiveEntry archiveEntry = null;

//把zip包中的每个文件读取出来

//然后把文件写到指定的文件夹

while((archiveEntry = zais.getNextEntry()) != null) {

//获取文件名

String entryFileName = archiveEntry.getName();

//构造解压出来的文件存放路径

String entryFilePath = saveFileDir + entryFileName;

byte[] content = new byte[(int) archiveEntry.getSize()];

zais.read(content);

OutputStream os = null;

try {

//把解压出来的文件写到指定路径

File entryFile = new File(entryFilePath);

os = new FileOutputStream(entryFile);

os.write(content);

}catch(IOException e) {

throw new IOException(e);

}finally {

if(os != null) {

os.flush();

os.close();

}

}

 

}

}catch(Exception e) {

throw new RuntimeException(e);

}finally {

try {

if(zais != null) {

zais.close();

}

if(is != null) {

is.close();

}

} catch (IOException e) {

throw new RuntimeException(e);

}

}

}

}

}

 

/**

* 判断文件名是否以.zip为后缀

* @param fileName 需要判断的文件名

* @return 是zip文件返回true,否则返回false

*/

public static boolean isEndsWithZip(String fileName) {

boolean flag = false;

if(fileName != null && !"".equals(fileName.trim())) {

if(fileName.endsWith(".ZIP")||fileName.endsWith(".zip")){

flag = true;

}

}

return flag;

}

 

}

 

 

 

 

package cn.luxh.test;

 

import java.io.File;

 

import org.junit.Test;

 

import cn.luxh.utils.ZipFileUtil;

 

/**

* 测试ZipFileUtil的压缩和解压缩方法

* @author Luxh

*/

public class ZipFileUtilTest {

 

@Test

public void testCompressFiles2Zip() {

//存放待压缩文件的目录

File srcFile = new File("D:/test");

//压缩后的zip文件路径

String zipFilePath = "d:/test2/test.zip";

if(srcFile.exists()) {

File[] files = srcFile.listFiles();

ZipFileUtil.compressFiles2Zip(files, zipFilePath);

}

}

 

@Test

public void testDecompressZip() {

//压缩包所在路径

String zipFilePath = "d:/test2/test.zip";

//解压后的文件存放目录

String saveFileDir = "d:/test2/";

//调用解压方法

ZipFileUtil.decompressZip(zipFilePath, saveFileDir);

}

}

时间: 2016-06-29
Tags: 文件, new, null

commons-compress操作zip文件(压缩和解压缩)的相关文章

在Java中操作Zip文件,压缩/解压

压缩 可随意转载,但请注明出处及作者SonyMusic2003.05.28==========================================================================在Java中操作Zip文件,压缩/解压 package test.nothing; import java.io.*;import java.util.*;import java.util.zip.*; import com.beaconsystem.util.*; impor

使用Python压缩和解压缩zip文件的教程

  这篇文章主要介绍了使用Python压缩和解压缩zip文件的教程,主要用到了zipfile包,需要的朋友可以参考下 python 的 zipfile 提供了非常便捷的方法来压缩和解压 zip 文件. 例如,在py脚本所在目录中,有如下文件: 代码如下: readability/readability.js readability/readability.txt readability/readability-print.css readability/sprite-readability.pn

重新想象 Windows 8 Store Apps (70) - 其它: 文件压缩和解压缩, 与 Windows 商店相关的操作, app 与 web, 几个 Core 的应用, 页面的生命周期和程序的生命周期

原文:重新想象 Windows 8 Store Apps (70) - 其它: 文件压缩和解压缩, 与 Windows 商店相关的操作, app 与 web, 几个 Core 的应用, 页面的生命周期和程序的生命周期 [源码下载] 重新想象 Windows 8 Store Apps (70) - 其它: 文件压缩和解压缩, 与 Windows 商店相关的操作, app 与 web, 几个 Core 的应用, 页面的生命周期和程序的生命周期 作者:webabcd 介绍重新想象 Windows 8

使用Python读写及压缩和解压缩文件的示例_python

读写文件首先看一个例子: f = open('thefile.txt','w') #以写方式打开, try: f.write('wokao') finally: f.close() 文件的打开方式: f = open('文件','mode') 'r':只读(缺省.如果文件不存在,则抛出错误) 'w':只写(如果文件不存在,则自动创建文件),此时无法调用f.read()方法,且当调用f.write()时,将清空文件原有内容 'a':附加到文件末尾 'r+':读写 如果需要以二进制方式打开文件,需要

Android如何实现压缩和解压缩文件_Android

废话不多说了,直接给大家贴java代码了,具体代码如下所示: Java代码 package com.maidong.utils; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOu

Android如何实现压缩和解压缩文件

废话不多说了,直接给大家贴java代码了,具体代码如下所示: Java代码 package com.maidong.utils; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOu

用ASP.Net实现文件的在线压缩和解压缩

asp.net|压缩|在线 我们经常会遇到批量上传的问题,也会遇到将某个目录下所有文件都上传到服务器上的问题.那么,如何解决此类问题呢?以前的技术一般采用ActiveX等方式,这里笔者采用SharpZlib来实现,听说VS2005已有压缩和解压缩的解决方案,笔者还没有时间用VS2005,所以就只好使用VS2003 + SharpZlib来解决问题了. 1.首先从这里下载0.84版本的SharpZlib源码及示例码. 2.下载下来之后你发现它没有VS2003的解决方案文件,没有关系.你可以自己建立

ASP.NET实现文件的在线压缩和解压缩

asp.net|压缩|在线 我们经常会遇到批量上传的问题,也会遇到将某个目录下所有文件都上传到服务器上的问题.那么,如何解决此类问题呢?以前的技术一般采用ActiveX等方式,这里笔者采用SharpZlib来实现,听说VS2005已有压缩和解压缩的解决方案,笔者还没有时间用VS2005,所以就只好使用VS2003 + SharpZlib来解决问题了. 1.首先从这里下载0.84版本的SharpZlib源码及示例码. 2.下载下来之后你发现它没有VS2003的解决方案文件,没有关系.你可以自己建立

Windows 8 Store Apps学习70) 其它: 文件压缩和解压缩

重新想象 Windows 8 Store Apps (70) - 其它: 文件压缩和解压缩, 与 Windows 商店相关的操作, app 与 web, 几个 Core 的应用, 页面的生命周期和程序的生命周期 作者:webabcd 介绍 重新想象 Windows 8 Store Apps 之 其它 文件压缩和解压缩 与 Windows 商店相关的操作 app 与 web 几个 Core 的应用 页面的生命周期和程序的生命周期 示例 1.演示如何压缩和解压缩文件 Feature/Compress