import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
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 java.util.ArrayList;
import java.util.Collection;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
public class Zip2Utils {
private static final int BUF_SIZE = 1024 * 1024;
public static void main(String[] args){
Collection<File> resFileList = new ArrayList<File>();
resFileList.add( new File("d://temp//1.txt"));
resFileList.add( new File("d://temp//2.txt"));
File file3 = new File("d://temp//test.zip");
try {
//压缩文件
Zip2Utils.zipFiles(resFileList, file3, "this is test");
//解压缩文件
Zip2Utils.upZipFile(file3, "d://ddd");
} catch (IOException e) {
e.printStackTrace();
}
}
public static void zipFiles(Collection<File> resFileList , File zipFile ,String comment) throws IOException{
ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFile),BUF_SIZE));
for(File file:resFileList){
Zip2Utils.zipFile(file, out, "");
}
out.close();
}
public static void zipFile(File resFile, ZipOutputStream zipout, String rootpath) throws IOException{
rootpath = rootpath + (rootpath.trim().length() == 0 ? "" : File.separator) + resFile.getName();
System.out.println(rootpath);
if (resFile.isDirectory()) {
File[] fileList = resFile.listFiles();
for (File file : fileList) {
zipFile(file, zipout, rootpath);
}
} else {
byte buffer[] = new byte[BUF_SIZE];
BufferedInputStream in = new BufferedInputStream(new FileInputStream(resFile), BUF_SIZE);
zipout.putNextEntry(new ZipEntry(rootpath));
int realLength;
while ((realLength = in.read(buffer)) != -1) {
zipout.write(buffer, 0, realLength);
}
in.close();
zipout.flush();
zipout.closeEntry();
}
}
/**
* 解压缩一个文件
*
* @param zipFile 压缩文件
* @param folderPath 解压缩的目标目录
* @throws IOException 当压缩过程出错时抛出
*/
public static void upZipFile(File zipFile, String folderPath) throws IOException {
File targetFolder = new File(folderPath);
if(!targetFolder.exists()){
targetFolder.mkdir();
}
ZipFile zf = new ZipFile(zipFile);
for (Enumeration entries = zf.entries(); entries.hasMoreElements();) {
ZipEntry entry = ((ZipEntry) entries.nextElement());
InputStream in = zf.getInputStream(entry);
OutputStream out = new FileOutputStream(folderPath + File.separator + entry.getName());
byte buffer[] = new byte[BUF_SIZE];
int realLength;
while ((realLength = in.read(buffer)) > 0) {
out.write(buffer, 0, realLength);
}
in.close();
out.close();
}
}
}