JAVA操作zip文件的实用工具类
?
import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.Enumeration;import org.apache.tools.zip.ZipEntry;import org.apache.tools.zip.ZipFile;import org.apache.tools.zip.ZipOutputStream;import com.ibm.widgetportal.common.Constants;/** * ZipUtils压缩/解压缩 * @author km-mawenwu-t */public class ZipUtils { public void zip(String inputFilename, String zipFilename) throws IOException { zip(new File(inputFilename), zipFilename); } public void zip(File inputFile, String zipFilename) throws IOException { ZipOutputStream out = new ZipOutputStream(new FileOutputStream( zipFilename)); try { zip(inputFile, out, ""); } catch (IOException e) { throw e; } finally { if (out != null) { out.close(); out = null; } } } private void zip(File inputFile, ZipOutputStream out, String base) throws IOException { if (inputFile.isDirectory()) { File[] inputFiles = inputFile.listFiles(); out.putNextEntry(new ZipEntry(base + "/")); base = base.length() == 0 ? "" : base + "/"; for (int i = 0; i < inputFiles.length; i++) { zip(inputFiles[i], out, base + inputFiles[i].getName()); } } else { if (base.length() > 0) { out.putNextEntry(new ZipEntry(base)); } else { out.putNextEntry(new ZipEntry(inputFile.getName())); } FileInputStream in = new FileInputStream(inputFile); try { int c; byte[] by = new byte[Constants.BUFFEREDSIZE]; while ((c = in.read(by)) != -1) { out.write(by, 0, c); } } catch (IOException e) { throw e; } finally { if(in!=null){ in.close(); in=null; } if(out!=null){ out.close(); out=null; } } } } @SuppressWarnings("unchecked")public void unzip(File zipFilename, String outputDirectory) throws Exception { try { File outFile = new File(outputDirectory); if (!outFile.exists()) { outFile.mkdirs(); } ZipFile zipFile = new ZipFile(zipFilename); Enumeration en = zipFile.getEntries(); ZipEntry zipEntry = null; while (en.hasMoreElements()) { zipEntry = (ZipEntry) en.nextElement(); String zipEntryString = zipEntry.toString(); if (zipEntry.isDirectory()) { continue; } if (zipEntryString.indexOf("/")>0) { // mkdir directory String dirName = zipEntry.getName(); dirName = dirName.substring(0, dirName.lastIndexOf("/")); File f1 = new File(outFile.getPath() + File.separator + dirName); f1.mkdirs(); dirName = zipEntry.getName(); File f2 = new File(outFile.getPath() + File.separator + dirName); f2.createNewFile(); copy(f2, zipFile, zipEntry); } else { // unzip file File f = new File(outFile.getPath() + File.separator + zipEntry.getName()); f.createNewFile(); copy(f, zipFile, zipEntry); } } } catch (Exception e) {e = new Exception("解压zip文件出错!");throw e;} } private void copy(File f,ZipFile zipFile,ZipEntry zipEntry) throws IOException{ InputStream in = zipFile.getInputStream(zipEntry); FileOutputStream out = new FileOutputStream(f); try { int c; byte[] by = new byte[Constants.BUFFEREDSIZE]; while ((c = in.read(by)) != -1) { out.write(by, 0, c); } } catch (IOException e) { throw e; } finally { if (out != null) { out.close(); out = null; } if (in != null) { in.close(); in = null; } } } }