ice world

          There is nothing too difficult if you put your heart into it.
          posts - 104, comments - 103, trackbacks - 0, articles - 0

          Java Zip Utils 壓縮/解壓縮工具包

          Posted on 2012-05-26 10:51 IceWee 閱讀(5617) 評論(1)  編輯  收藏 所屬分類: Java
          實際開發(fā)中可能會用到壓縮或解壓縮,底層借助于apache的zip,依賴jar文件:ant-1.7.1.jar

          ZipUtilsTester.java
          public static void main(String[] args) throws Exception {
                  String sourceFolder 
          = "D:/壓縮文件夾";
                  String zipFilePath 
          = "D:/壓縮包.zip";
                  String destDir 
          = "D:/";
                  ZipUtils.zip(sourceFolder, zipFilePath);
                  ZipUtils.unZip(zipFilePath, destDir);
              }


          ZipUtils.java
          import java.io.BufferedInputStream;
          import java.io.BufferedOutputStream;
          import java.io.File;
          import java.io.FileInputStream;
          import java.io.FileOutputStream;
          import java.io.InputStream;
          import java.io.OutputStream;
          import java.util.Enumeration;

          import org.apache.tools.zip.ZipEntry;
          import org.apache.tools.zip.ZipFile;
          import org.apache.tools.zip.ZipOutputStream;

          /**
           * <p>
           * ZIP工具包
           * </p>
           * <p>
           * 依賴:ant-1.7.1.jar
           * </p>
           * 
           * 
          @author IceWee
           * @date 2012-5-26
           * 
          @version 1.0
           
          */

          public class ZipUtils {
              
              
          /**
               * 使用GBK編碼可以避免壓縮中文文件名亂碼
               
          */

              
          private static final String CHINESE_CHARSET = "GBK";
              
              
          /**
               * 文件讀取緩沖區(qū)大小
               
          */

              
          private static final int CACHE_SIZE = 1024;
              
              
          /**
               * <p>
               * 壓縮文件
               * </p>
               * 
               * 
          @param sourceFolder 壓縮文件夾
               * 
          @param zipFilePath 壓縮文件輸出路徑
               * 
          @throws Exception
               
          */

              
          public static void zip(String sourceFolder, String zipFilePath) throws Exception {
                  OutputStream out 
          = new FileOutputStream(zipFilePath);
                  BufferedOutputStream bos 
          = new BufferedOutputStream(out);
                  ZipOutputStream zos 
          = new ZipOutputStream(bos);
                  
          // 解決中文文件名亂碼
                  zos.setEncoding(CHINESE_CHARSET);
                  File file 
          = new File(sourceFolder);
                  String basePath 
          = null;
                  
          if (file.isDirectory()) {
                      basePath 
          = file.getPath();
                  }
           else {
                      basePath 
          = file.getParent();
                  }

                  zipFile(file, basePath, zos);
                  zos.closeEntry();
                  zos.close();
                  bos.close();
                  out.close();
              }

              
              
          /**
               * <p>
               * 遞歸壓縮文件
               * </p>
               * 
               * 
          @param parentFile
               * 
          @param basePath
               * 
          @param zos
               * 
          @throws Exception
               
          */

              
          private static void zipFile(File parentFile, String basePath, ZipOutputStream zos) throws Exception {
                  File[] files 
          = new File[0];
                  
          if (parentFile.isDirectory()) {
                      files 
          = parentFile.listFiles();
                  }
           else {
                      files 
          = new File[1];
                      files[
          0= parentFile;
                  }

                  String pathName;
                  InputStream is;
                  BufferedInputStream bis;
                  
          byte[] cache = new byte[CACHE_SIZE];
                  
          for (File file : files) {
                      
          if (file.isDirectory()) {
                          pathName 
          = file.getPath().substring(basePath.length() + 1+ "/";
                          zos.putNextEntry(
          new ZipEntry(pathName));
                          zipFile(file, basePath, zos);
                      }
           else {
                          pathName 
          = file.getPath().substring(basePath.length() + 1);
                          is 
          = new FileInputStream(file);
                          bis 
          = new BufferedInputStream(is);
                          zos.putNextEntry(
          new ZipEntry(pathName));
                          
          int nRead = 0;
                          
          while ((nRead = bis.read(cache, 0, CACHE_SIZE)) != -1{
                              zos.write(cache, 
          0, nRead);
                          }

                          bis.close();
                          is.close();
                      }

                  }

              }

              
              
          /**
               * <p>
               * 解壓壓縮包
               * </p>
               * 
               * 
          @param zipFilePath 壓縮文件路徑
               * 
          @param destDir 壓縮包釋放目錄
               * 
          @throws Exception
               
          */

              
          public static void unZip(String zipFilePath, String destDir) throws Exception {
                  ZipFile zipFile 
          = new ZipFile(zipFilePath, CHINESE_CHARSET);
                  Enumeration
          <?> emu = zipFile.getEntries();
                  BufferedInputStream bis;
                  FileOutputStream fos;
                  BufferedOutputStream bos;
                  File file, parentFile;
                  ZipEntry entry;
                  
          byte[] cache = new byte[CACHE_SIZE];
                  
          while (emu.hasMoreElements()) {
                      entry 
          = (ZipEntry) emu.nextElement();
                      
          if (entry.isDirectory()) {
                          
          new File(destDir + entry.getName()).mkdirs();
                          
          continue;
                      }

                      bis 
          = new BufferedInputStream(zipFile.getInputStream(entry));
                      file 
          = new File(destDir + entry.getName());
                      parentFile 
          = file.getParentFile();
                      
          if (parentFile != null && (!parentFile.exists())) {
                          parentFile.mkdirs();
                      }

                      fos 
          = new FileOutputStream(file);
                      bos 
          = new BufferedOutputStream(fos, CACHE_SIZE);
                      
          int nRead = 0;
                      
          while ((nRead = bis.read(cache, 0, CACHE_SIZE)) != -1{
                          fos.write(cache, 
          0, nRead);
                      }

                      bos.flush();
                      bos.close();
                      fos.close();
                      bis.close();
                  }

                  zipFile.close();
              }

              
          }





          Feedback

          # re: Java Zip Utils 壓縮/解壓縮工具包[未登錄]  回復  更多評論   

          2014-05-14 17:12 by test
          可以使用,多謝
          主站蜘蛛池模板: 六盘水市| 吴忠市| 鹤庆县| 贺州市| 同江市| 高雄县| 嵩明县| 和林格尔县| 宁陕县| 扶风县| 武城县| 湖州市| 宜君县| 分宜县| 南涧| 金门县| 顺义区| 龙山县| 海晏县| 内乡县| 平凉市| 项城市| 镇远县| 灵石县| 金华市| 东安县| 洱源县| 兴仁县| 景泰县| 白银市| 晋州市| 基隆市| 曲松县| 得荣县| 邹平县| 新巴尔虎左旗| 建始县| 望江县| 库伦旗| 陆良县| 陇川县|