package com.hasonger.util;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
/**
* 压缩文件工具类,提供压缩和解压文件
* 暂时仅提供解压到压缩文件的父路径下,即压缩文件的当前路径。
* @author Administrator
*
*/
public class ZipKit {
public static void main(String[] args) {
// String[] files = {"E:/文档/_java学习路线.doc", "E:/文档/房屋租赁合同.doc", "D:/corejava/blog/blog.log"};
// compress(files, "e:/压缩测试haha.rar");
unCompress("e:/压缩测试haha.rar");
}
/**
* 解压缩文件,将文件解压到压缩文件当前文件夹
* @param zipname 压缩文件绝对路径
*/
public static void unCompress(String zipFileName) {
ZipInputStream zin = null;
BufferedOutputStream bout = null;
try {
try {
zin = new ZipInputStream(new BufferedInputStream(new FileInputStream(zipFileName)));
ZipEntry zipEntry = null;
while ((zipEntry= zin.getNextEntry()) != null) {
//将压缩文件解压到所在文件夹
bout = new BufferedOutputStream(new FileOutputStream(new File(new File(zipFileName).getParent(), new File(zipEntry.getName()).getName())));
int b = 0;
while ((b = zin.read()) != -1) {
bout.write(b);
}
//获取压缩文件中每一个文件名
System.out.println("正在解压:" + new File(zipEntry.getName()).getName());
bout.flush();
zin.closeEntry();
}
System.out.println("解压成功!");
} finally {
if(zin != null) {
zin.close();
}
if(bout != null) {
bout.close();
}
}
} catch (FileNotFoundException fe) {
fe.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 压缩文件
* @param filelists 被压缩文件
* @param zipfilename 压缩文件绝对路径
* @return
*/
public static File compress(String[] filelists, String zipFileName) {
File file = new File(zipFileName);
ZipOutputStream zout = null;
BufferedInputStream in = null;
try {
try {
zout = new ZipOutputStream(new FileOutputStream(file));
for (String filename : filelists) {
ZipEntry zipEntry = new ZipEntry(filename);
zout.putNextEntry(zipEntry);
//写入数据到压缩流
in = new BufferedInputStream(new FileInputStream(filename));
int b = 0;
while ((b = in.read()) != -1) {
zout.write(b);
}
System.out.println("正在压缩:" + filename);
zout.flush();
zout.closeEntry();
}
System.out.println("压缩成功!");
} finally {
if (zout != null) {
zout.close();
}
if (in != null) {
in.close();
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return file;
}
}
转载于:https://my.oschina.net/hasonger/blog/213028