import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
public class ZipGenerate {
/**
* 压缩成zip包
*
* @param souceFileName
* @param destFileName
*/
private void zip(String souceFileName, String destFileName){
try {
File file = new File(souceFileName);
if(file.exists()){
FileOutputStream fileOut = new FileOutputStream(destFileName);
ZipOutputStream out = new ZipOutputStream(fileOut);
String base="";
traverseFile(file, out,base);
out.close();
fileOut.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 循环遍历文件夹的所有文件
* @param file
* @param out
* @param base
* @throws IOException
*/
private void traverseFile(File file, ZipOutputStream out,String base)
throws IOException {
if (file.isDirectory()) {
File[] files = file.listFiles();
base=base+file.getName()+"/";
out.putNextEntry(new ZipEntry(base));
// System.out.println(base);
for (File f : files) {
traverseFile(f, out,base);
}
} else {
base=base+file.getName();
// System.out.println(base);
out.putNextEntry(new ZipEntry(base));
FileInputStream in = new FileInputStream(file);
int b;
byte[] by = new byte[1024];
while ((b = in.read(by)) != -1) {
out.write(by, 0, b);
}
in.close();
}
}
/**
* 解压缩文件
* @param zipname
*/
private void unzip(String zipname){
try {
File zipFile = new File(zipname);
String dictory_name=zipFile.getParent();
File top_dictory=new File(dictory_name);
if(!top_dictory.exists()){
top_dictory.mkdirs();
}
ZipFile zip = new ZipFile(zipFile);
for (Enumeration entries=zip.entries(); entries.hasMoreElements();) {
ZipEntry entry = (ZipEntry)entries.nextElement();
if(entry.isDirectory()){
File dictory=new File(dictory_name+File.separator+entry.getName());
if(!dictory.exists()){
dictory.mkdirs();
}
}else{
InputStream in = zip.getInputStream(entry);
String path=dictory_name+File.separator+entry.getName();
File file=new File(path);
OutputStream out = new FileOutputStream(file);
int b;
byte[] by = new byte[1024];
while ((b = in.read(by)) != -1) {
out.write(by, 0, b);
}
out.close();
in.close();
}
}
} catch (ZipException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
// File f=new File("E:\\temp\\hello.zip");
// f.delete();
ZipGenerate z = new ZipGenerate();
//压缩
// z.zip("E:\\temp\\hello", "E:\\temp\\hello.zip");
//解压
z.unzip("E:\\temp\\hello.zip");
}
}