java 压缩打包_java打包压缩文件

本文介绍如何使用Apache Commons Compress库在Java中创建Zip文件,将目录打包到zip,以及解压zip到指定目录。重点展示了ZipFileUtils类的操作方法,包括创建压缩输出流、打包文件和目录,以及解压功能。
摘要由CSDN通过智能技术生成

package com.it.simple.util;

import java.io.BufferedOutputStream;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.OutputStream;

import java.io.Writer;

import java.util.Enumeration;

import javax.servlet.http.HttpServletResponse;

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

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

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

import org.apache.commons.io.FileUtils;

import org.apache.commons.io.IOUtils;

import org.apache.commons.lang.StringUtils;

/***

* 将压缩文件写出页面web下载

* @架包 commons-compress-1.8.jar

*

*/

public class ZipFileUtils{

public static void main(String[] args) throws FileNotFoundException, Exception {

/*ZipFileUtils main = new ZipFileUtils("c:/test1.zip");

main.createZipOut();

main.packToolFiles("D:/444", "444");

main.closeZipOut();*/

/*main = new Main("c:/test2.zip");

main.createZipOut();

main.packToolFiles("C:/test", "test");

main.closeZipOut();

Main.unZipToFolder("c:/test1.zip", "c:/test1");

Main.unZipToFolder("c:/test2.zip", "c:/test2");

*/

}

private OutputStream out = null;

private BufferedOutputStream bos = null;

private ZipArchiveOutputStream zaos = null;

private String zipFileName = null;

public ZipFileUtils(String zipname,HttpServletResponse response) {

this.zipFileName = zipname;

try{

String fileName = "文件打包下载_"+System.currentTimeMillis()+".zip";

response.setHeader("content-disposition", "attachment;filename=\""

+ new String(fileName.getBytes("gb2312"), "iso8859-1") + "\"");

//response.setContentType("APPLICATION/octet-stream");

response.setContentType("multipart/form-data");

out = response.getOutputStream();

}catch(Exception e){

}

}

public void createZipOut() throws FileNotFoundException, IOException {

// File f = new File(zipFileName);

// out = new FileOutputStream(f);

bos = new BufferedOutputStream(out);

zaos = new ZipArchiveOutputStream(bos);

zaos.setEncoding("GBK");

}

public void closeZipOut() throws Exception {

zaos.flush();

zaos.close();

bos.flush();

bos.close();

out.flush();

out.close();

}

/**

* 把一个目录打包到zip文件中的某目录

* @param dirpath 目录绝对地址

* @param pathName zip中目录

*/

public void packToolFiles(String dirpath, String pathName) throws FileNotFoundException, IOException {

if (StringUtils.isNotEmpty(pathName)) {

pathName = pathName + File.separator;

}

packToolFiles(zaos, dirpath, pathName);

}

/**

* 把一个目录打包到一个指定的zip文件中

* @param dirpath 目录绝对地址

* @param pathName zip文件抽象地址

*/

public void packToolFiles(ZipArchiveOutputStream zaos, String dirpath, String pathName) throws FileNotFoundException, IOException {

ByteArrayOutputStream tempbaos = new ByteArrayOutputStream();

BufferedOutputStream tempbos = new BufferedOutputStream(tempbaos);

File dir = new File(dirpath);

//返回此绝对路径下的文件

File[] files = dir.listFiles();

if (files == null || files.length < 1) {

return;

}

for (int i = 0; i < files.length; i++) {

//判断此文件是否是一个文件夹

if (files[i].isDirectory()) {

packToolFiles(zaos, files[i].getAbsolutePath(), pathName + files[i].getName() + File.separator);

} else {

zaos.putArchiveEntry(new ZipArchiveEntry(pathName + files[i].getName()));

IOUtils.copy(new FileInputStream(files[i].getAbsolutePath()), zaos);

zaos.closeArchiveEntry();

}

}

tempbaos.flush();

tempbaos.close();

tempbos.flush();

tempbos.close();

}

/**

* 把一个zip文件解压到一个指定的目录中

* @param zipfilename zip文件抽象地址

* @param outputdir 目录绝对地址

*/

public static void unZipToFolder(String zipfilename, String outputdir) throws IOException {

File zipfile = new File(zipfilename);

if (zipfile.exists()) {

outputdir = outputdir + File.separator;

FileUtils.forceMkdir(new File(outputdir));

ZipFile zf = new ZipFile(zipfile, "GBK");

Enumeration zipArchiveEntrys = zf.getEntries();

while (zipArchiveEntrys.hasMoreElements()) {

ZipArchiveEntry zipArchiveEntry = (ZipArchiveEntry) zipArchiveEntrys.nextElement();

if (zipArchiveEntry.isDirectory()) {

FileUtils.forceMkdir(new File(outputdir + zipArchiveEntry.getName() + File.separator));

} else {

IOUtils.copy(zf.getInputStream(zipArchiveEntry), FileUtils.openOutputStream(new File(outputdir + zipArchiveEntry.getName())));

}

}

} else {

throw new IOException("指定的解压文件不存在:\t" + zipfilename);

}

}

}

注释:如果是web项目传outputStream流进来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值