首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

JAVA操作zip资料的实用工具类

2012-08-21 
JAVA操作zip文件的实用工具类?import java.io.Fileimport java.io.FileInputStreamimport java.io.FileO

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;        }        } }        }

热点排行