Zip文件压缩Java类代码

jopen 12年前

public class ZipFileUtil {   private final static int BUFFER=2048;    /**     * 解压zip文件     *      * @param zipFilePath     *            zip文件绝对路径     * @param unzipDirectory     *            解压到的目录     * @throws Exception     */      @SuppressWarnings("unchecked")   public static boolean unzip(String zipFilePath, String unzipDirectory)    throws Exception {     boolean flag=true;     try{      // 创建文件对象      File file = new File(zipFilePath);      // 创建zip文件对象      ZipFile zipFile = new ZipFile(file);      // 创建本zip文件解压目录      File unzipFile = new File(unzipDirectory + "/"        + getSuffixName(file.getName()));      if (unzipFile.exists())       unzipFile.delete();      unzipFile.mkdir();      // 得到zip文件条目枚举对象      Enumeration zipEnum = zipFile.getEntries();      // 定义输入输出流对象      InputStream input = null;      OutputStream output = null;      // 定义对象      ZipEntry entry = null;      // 循环读取条目      while (zipEnum.hasMoreElements()) {       // 得到当前条目       entry = (ZipEntry) zipEnum.nextElement();       String entryName = new String(entry.getName());       // 用/分隔条目名称       String names[] = entryName.split("\\/");       int length = names.length;       String path = unzipFile.getAbsolutePath();       for (int v = 0; v < length; v++) {        if (v < length - 1) { // 最后一个目录之前的目录         path += "/" + names[v] + "/";         createDir(path);        } else { // 最后一个         if (entryName.endsWith("/")) // 为目录,则创建文件夹          createDir(unzipFile.getAbsolutePath() + "/" + entryName);         else { // 为文件,则输出到文件          input = zipFile.getInputStream(entry);          output = new FileOutputStream(new File(unzipFile            .getAbsolutePath()            + "/" + entryName));          byte[] buffer = new byte[1024 * 8];          int readLen = 0;          while ((readLen = input.read(buffer, 0, 1024 * 8)) != -1)           output.write(buffer, 0, readLen);          // 关闭流          input.close();          output.flush();          output.close();         }        }       }      }}catch(Exception e){       flag=false;      }         return flag;   }    /**     * 创建目录     *      * @param path     *            目录绝对路径名     */    static void createDir(String path) {     File dir = new File(path);     if (dir.exists() == false)      dir.mkdir();    }    /**     * 取得文件名,不包含后缀名     *      * @param name     *            完整文件名     * @return 文件名(不包含后缀名)     */    static String getSuffixName(String name) {     return name.substring(0, name.lastIndexOf("."));    }   /**    *     * 压缩多个文件    *     * @param zipFileName    *            压缩后的文件名    *     * @param inputFiles 待压缩的文件列表    *     */   public static boolean zipFile(String zipFileName, List<File> inputFiles){          boolean test = true;          try {              BufferedInputStream origin = null;              FileOutputStream dest = new FileOutputStream(zipFileName);              ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(                      dest));              byte data[] = new byte[BUFFER];                            for (int i = 0; i < inputFiles.size(); i++) {               File file=inputFiles.get(i);                  FileInputStream fi = new FileInputStream(file);                  origin = new BufferedInputStream(fi, BUFFER);                  ZipEntry entry = new ZipEntry(file.getName());                  out.putNextEntry(entry);                  int count;                  while ((count = origin.read(data, 0, BUFFER)) != -1) {                      out.write(data, 0, count);                  }                  origin.close();              }              out.close();          } catch (Exception e) {              test = false;              e.printStackTrace();          }          return test;   }   /**    *     * 压缩多个文件    *     * @param zipFileName    *            压缩后的文件名    *     * @param inputFiles 待压缩的文件列表    *     */   public static boolean zip(String zipFileName, List<String> inputFiles){          boolean test = true;          try {              BufferedInputStream origin = null;              FileOutputStream dest = new FileOutputStream(zipFileName);              ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(                      dest));              byte data[] = new byte[BUFFER];                            for (int i = 0; i < inputFiles.size(); i++) {                  File file = new File(inputFiles.get(i));                  FileInputStream fi = new FileInputStream(file);                  origin = new BufferedInputStream(fi, BUFFER);                  ZipEntry entry = new ZipEntry(file.getName());                  out.putNextEntry(entry);                  int count;                  while ((count = origin.read(data, 0, BUFFER)) != -1) {                      out.write(data, 0, count);                  }                  origin.close();              }              out.close();          } catch (Exception e) {              test = false;              e.printStackTrace();          }          return test;   }  }