隨筆-46  評論-54  文章-0  trackbacks-0

          Java多層目錄打包和解壓代碼(apache commons compress, io, lang)

           

          package zip;

           

          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 {

           

              public static void main(String[] args) throws FileNotFoundException, Exception {

                  Main main = new Main("c:/test1.zip");

                  main.createZipOut();

                  main.packToolFiles("C:/test", "");

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

                  }

              }

          }

           

           

          本文地址:http://docs.google.com/View?id=ajfmzbdvh8wz_60g2dhfkgg

           

          posted on 2009-11-12 22:53 rox 閱讀(3999) 評論(1)  編輯  收藏 所屬分類: Java

          評論:
          # re: Java多層目錄打包和解壓代碼(apache commons compress, io, lang)[未登錄] 2014-07-23 17:06 | s
          qwqw  回復  更多評論
            
          主站蜘蛛池模板: 保德县| 刚察县| 南昌县| 瓮安县| 温泉县| 阿坝| 东阳市| 澄迈县| 玛沁县| 奎屯市| 保亭| 陕西省| 沅陵县| 竹溪县| 淮北市| 松溪县| 公安县| 通榆县| 淳化县| 长岛县| 昌图县| 博湖县| 山东省| 普洱| 江阴市| 彭州市| 临泉县| 平罗县| 福建省| 怀柔区| 抚州市| 昌都县| 天津市| 长岭县| 谷城县| 昆山市| 桦川县| 苏州市| 赣州市| 海林市| 台安县|