`

ZIP打包

    博客分类:
  • java
阅读更多
package com.snda.swp.util;

import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Enumeration;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import org.apache.commons.compress.archivers.zip.ZipFile;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;

public class Main {
 private static String src = "D:\\apache-tomcat-6.0.28\\webapps\\swp1\\upload\\temporary\\我的站点";

 private static String dst = "D:\\apache-tomcat-6.0.28\\webapps\\swp1\\upload\\compress\\cc.zip";

 public static void main(String[] args) throws FileNotFoundException, Exception {
  Main main = new Main(dst);
  main.createZipOut();
  main.packToolFiles(src, "");
  main.closeZipOut();
  
  //main = new Main("c:/test2.zip");
  //main.createZipOut();
  //main.packToolFiles("C:/test", "test");
  //main.closeZipOut();
  
  //Main.unZipToFolder("c:/test1.zip", "c:/test1");
  //Main.unZipToFolder("c:/test2.zip", "c:/test2");
 }

 private OutputStream out = null;

 private BufferedOutputStream bos = null;

 private ZipArchiveOutputStream zaos = null;

 private String zipFileName = null;

 public Main(String zipname) {
  this.zipFileName = zipname;
 }

 public void createZipOut() throws FileNotFoundException, IOException {
  File f = new File(zipFileName);
  out = new FileOutputStream(f);
  bos = new BufferedOutputStream(out);
  zaos = new ZipArchiveOutputStream(bos);
  zaos.setEncoding("GBK");

 }

 public void closeZipOut() throws Exception {
  zaos.flush();
  zaos.close();

  bos.flush();
  bos.close();

  out.flush();
  out.close();
 }

 /**
  * 把一个目录打包到zip文件中的某目录
  *
  * @param dirpath
  *            目录绝对地址
  * @param pathName
  *            zip中目录
  */
 public void packToolFiles(String dirpath, String pathName) throws FileNotFoundException,
 IOException {
  if (StringUtils.isNotEmpty(pathName)) {
   pathName = pathName + File.separator;
  }
  packToolFiles(zaos, dirpath, pathName);
 }

 /**
  * 把一个目录打包到一个指定的zip文件中
  *
  * @param dirpath
  *            目录绝对地址
  * @param pathName
  *            zip文件抽象地址
  */
 public void packToolFiles(ZipArchiveOutputStream zaos, String dirpath, String pathName)
 throws FileNotFoundException, IOException {

  ByteArrayOutputStream tempbaos = new ByteArrayOutputStream();
  BufferedOutputStream tempbos = new BufferedOutputStream(tempbaos);

  File dir = new File(dirpath);
  // 返回此绝对路径下的文件
  File[] files = dir.listFiles();
  if (files == null || files.length < 1) {
   return;
  }
  for (int i = 0; i < files.length; i++) {
   // 判断此文件是否是一个文件夹
   if (files[i].isDirectory()) {
    packToolFiles(zaos, files[i].getAbsolutePath(), pathName + files[i].getName()
    + File.separator);
   } else {
    zaos.putArchiveEntry(new ZipArchiveEntry(pathName + files[i].getName()));
    IOUtils.copy(new FileInputStream(files[i].getAbsolutePath()), zaos);
    zaos.closeArchiveEntry();

   }

  }

  tempbaos.flush();
  tempbaos.close();

  tempbos.flush();
  tempbos.close();
 }

 /**
  * 把一个zip文件解压到一个指定的目录中
  *
  * @param zipfilename
  *            zip文件抽象地址
  * @param outputdir
  *            目录绝对地址
  */
 public static void unZipToFolder(String zipfilename, String outputdir) throws IOException {
  File zipfile = new File(zipfilename);
  if (zipfile.exists()) {
   outputdir = outputdir + File.separator;
   FileUtils.forceMkdir(new File(outputdir));

   ZipFile zf = new ZipFile(zipfile, "GBK");
   Enumeration zipArchiveEntrys = zf.getEntries();
   while (zipArchiveEntrys.hasMoreElements()) {
    ZipArchiveEntry zipArchiveEntry = (ZipArchiveEntry) zipArchiveEntrys.nextElement();
    if (zipArchiveEntry.isDirectory()) {
     FileUtils.forceMkdir(new File(outputdir + zipArchiveEntry.getName()
     + File.separator));
    } else {
     IOUtils.copy(zf.getInputStream(zipArchiveEntry), FileUtils
     .openOutputStream(new File(outputdir + zipArchiveEntry.getName())));
    }
   }
  } else {
   throw new IOException("指定的解压文件不存在:\t" + zipfilename);
  }
 }
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics