package com.snda.swp.util;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Enumeration;
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;
public class Main {
private static String src = "D:\\apache-tomcat-6.0.28\\webapps\\swp1\\upload\\temporary\\我的站点";
private static String dst = "D:\\apache-tomcat-6.0.28\\webapps\\swp1\\upload\\compress\\cc.zip";
public static void main(String[] args) throws FileNotFoundException, Exception {
Main main = new Main(dst);
main.createZipOut();
main.packToolFiles(src, "");
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 Main(String zipname) {
this.zipFileName = zipname;
}
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);
}
}
}
ZIP打包
最新推荐文章于 2022-09-01 11:51:07 发布
本文介绍了一个Java实现的文件压缩与解压缩工具类,该工具可以将指定目录下的文件打包成ZIP格式,并支持解压ZIP文件到指定目录。使用了Apache Commons Compress库来处理ZIP文件。
摘要由CSDN通过智能技术生成