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.ZipFile;
import java.util.zip.ZipOutputStream;
public class ZipFolder {
OutputStream out;
static ZipOutputStream zips;
static InputStream in;
private String dir;
public OutputStream getOut() {
return out;
}
public void setOut(OutputStream out) {
this.out = out;
}
public String getDir() {
return dir;
}
public void setDir(String dir) {
this.dir = dir;
}
public void zipfile(String file) {
try {
int len = 0;
byte[] buff = new byte[1024];
in = new FileInputStream(file);
zips.putNextEntry(new ZipEntry(file.substring(dir.length() + 2)));
while ((len = in.read(buff)) != -1) {
zips.write(buff, 0, len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void folder(String folder) {
File f = new File(folder);
File[] fw = f.listFiles();
for (int i = 0; i < fw.length; i++) {
if (fw[i].isDirectory()) {
System.out.println("|" + fw[i]);
folder(fw[i].toString());
} else {
System.out.println("| " + fw[i].toString());
zipfile(fw[i].toString());
}
}
}
// 压缩文件
private void zipIn(String fileIn,String zipOut) {
ZipFolder is = new ZipFolder();
OutputStream out1;
try {
out1 = new FileOutputStream(zipOut);
is.setOut(out1);
zips = new ZipOutputStream(is.getOut());
is.setDir(fileIn);
// 调用 folder
is.folder(fileIn);
zips.close();
in.close();
is.getOut().close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("| 压缩结束.... ");
}
private void UnZip(ZipFile zFile, String path) {
try {
// 获取压缩包中的每个文件
Enumeration enu = zFile.entries();
while (enu.hasMoreElements()) {
// 将文件路径放入zEntry
ZipEntry zEntry = (ZipEntry) enu.nextElement();
// 创建此文件路径的File对象
File file = new File(path + "//" + zEntry.getName());
// 如果文件夹不存在,则创建
File parentDir = new File(file.getParent());
if (!parentDir.exists()) {
parentDir.mkdirs();
}
// 解压文件
InputStream read = zFile.getInputStream(zEntry);
FileOutputStream write = new FileOutputStream(file.getPath());
int len = 0;
byte[] buff = new byte[1024];
while ((len = read.read(buff, 0, buff.length)) != -1) {
write.write(buff, 0, len);
}
write.close();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
// 解压缩文件
public void zipOut(String zipIn,String fileOut) {
try {
// ZipFile 以使用指定模式从指定 File(path) 对象读取
ZipFile zip = new ZipFile(new File(zipIn));
UnZip(zip, fileOut);
zip.close();
} catch (Exception ex) {
ex.printStackTrace();
}
System.out.println(" 解压缩结束....");
}
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
ZipFolder zip = new ZipFolder();
// // 1.压缩
// zip.zipIn("E:\\Program Files", "E:\\files.zip");
// // 2.解压缩
// zip.zipOut("E:\\files.zip","e:\\321");
}
}