package com.taobao.easyweb.core.agent; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.Enumeration; import java.util.HashSet; import java.util.Set; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import java.util.zip.ZipOutputStream; public class ZipUtil { static Set<String> ignores = new HashSet<String>(); static { ignores.add("target"); } public static void main(String[] args) throws Exception { // zip("C:/Users/jimmey/workspace/ew/groovy/ide", "/home/admin/test.zip"); upzip("/home/admin/test.zip", "/home/admin/ide"); } static int BUFFER_SIZE = 1024; public static void upzip(String inputZip, String outputFile) { //ʹ��zip����Ϊ��ѹ�ļ��� File unzipdir = new File(outputFile+"/"+new File(inputZip).getName().replace(".zip", "")); unzipdir.mkdirs(); try { ZipFile zipFile = new ZipFile(inputZip); Enumeration<? extends ZipEntry> emu = zipFile.entries(); while (emu.hasMoreElements()) { ZipEntry zipEntry = (ZipEntry) emu.nextElement(); if (zipEntry.isDirectory()) { // ���Ŀ¼��Ϊһ��file����һ�Σ�����ֻ����Ŀ¼�Ϳ��ԣ�֮�µ��ļ����ᱻ������ new File(unzipdir, zipEntry.getName()).mkdirs(); continue; } File subfile = new File(unzipdir, zipEntry.getName()); File parent = subfile.getParentFile(); if (parent != null && (!parent.exists())) { // ���������ԭ����zipfile��ȡ�ļ��������ȡ�ģ������ɿ����ȶ�ȡһ���ļ� // ������ļ����ڵ�Ŀ¼��û�г��ֹ�������Ҫ����Ŀ¼���� parent.mkdirs(); } BufferedInputStream bin = new BufferedInputStream(zipFile.getInputStream(zipEntry)); BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream(subfile), BUFFER_SIZE); int count; byte data[] = new byte[BUFFER_SIZE]; while ((count = bin.read(data, 0, BUFFER_SIZE)) != -1) { bout.write(data, 0, count); } bout.close(); bin.close(); } zipFile.close(); } catch (Exception e) { } } public static void zip(String inputFile, String outputFile) throws Exception { ZipOutputStream out = new ZipOutputStream(new FileOutputStream(outputFile)); zip(out, new File(inputFile), ""); System.out.println("zip done"); out.close(); } private static void zip(ZipOutputStream out, File f, String base) throws Exception { if (f.getName().startsWith(".") || ignores.contains(f.getName())) { return; } if (f.isDirectory()) { File[] fl = f.listFiles(); out.putNextEntry(new ZipEntry(base + "/")); base = base.length() == 0 ? "" : base + "/"; for (int i = 0; i < fl.length; i++) { zip(out, fl[i], base + fl[i].getName()); } } else { out.putNextEntry(new ZipEntry(base)); FileInputStream in = new FileInputStream(f); int b; System.out.println(base); while ((b = in.read()) != -1) { out.write(b); } in.close(); } } }