Terry.Li-彬

          虛其心,可解天下之問;專其心,可治天下之學;靜其心,可悟天下之理;恒其心,可成天下之業。

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks

           

          package com.newegg.lab.util;

          import java.io.BufferedOutputStream;
          import java.io.File;
          import java.io.FileInputStream;
          import java.io.FileNotFoundException;
          import java.io.FileOutputStream;
          import java.io.IOException;
          import java.io.InputStream;
          import java.io.OutputStream;
          import java.util.Enumeration;

          import java.util.zip.ZipEntry;
          import java.util.zip.ZipFile;
          import java.util.zip.ZipOutputStream;

          //使用apache的api不存在壓縮文件名亂碼問題(該jar包在ant中)
          //import org.apache.tools.zip.ZipEntry;
          //import org.apache.tools.zip.ZipFile;
          //import org.apache.tools.zip.ZipOutputStream;

          /** *//**
           * 壓縮/解壓縮zip包處理類
           *
           * 
          @author terry.b.li
           * @date 2--2
           
          */

          public class ZipUtil {

              
          /** *//**
               * 壓縮
               *
               * 
          @param zipFileName
               *            壓縮產生的zip包文件名--帶路徑,如果為null或空則默認按文件名生產壓縮文件名
               * 
          @param relativePath
               *            相對路徑,默認為空
               * 
          @param directory
               *            文件或目錄的絕對路徑
               * 
          @throws FileNotFoundException
               * 
          @throws IOException
               * 
          @author terry.b.li
               
          */

              
          public static void zip(String zipFileName, String relativePath,
                      String directory) 
          throws FileNotFoundException, IOException {
                  String fileName 
          = zipFileName;
                  
          if (fileName == null || fileName.trim().equals("")) {
                      File temp 
          = new File(directory);
                      
          if (temp.isDirectory()) {
                          fileName 
          = directory + ".zip";
                      }
           else {
                          
          if (directory.indexOf("."> 0{
                              fileName 
          = directory.substring(0, directory
                                      .lastIndexOf(
          "."))
                                      
          + "zip";
                          }
           else {
                              fileName 
          = directory + ".zip";
                          }

                      }

                  }

                  ZipOutputStream zos 
          = new ZipOutputStream(new FileOutputStream(fileName));
                  
          try {
                      zip(zos, relativePath, directory);
                  }
           catch (IOException ex) {
                      
          throw ex;
                  }
           finally {
                      
          if (null != zos) {
                          zos.close();
                      }

                  }

              }


              
          /** *//**
               * 壓縮
               *
               * 
          @param zos
               *            壓縮輸出流
               * 
          @param relativePath
               *            相對路徑
               * 
          @param absolutPath
               *            文件或文件夾絕對路徑
               * 
          @throws IOException
               * 
          @author terry.b.li
               
          */

              
          private static void zip(ZipOutputStream zos, String relativePath,
                      String absolutPath) 
          throws IOException {
                  File file 
          = new File(absolutPath);
                  
          if (file.isDirectory()) {
                      File[] files 
          = file.listFiles();
                      
          for (int i = 0; i < files.length; i++{
                          File tempFile 
          = files[i];
                          
          if (tempFile.isDirectory()) {
                              String newRelativePath 
          = relativePath + tempFile.getName()
                                      
          + File.separator;
                              createZipNode(zos, newRelativePath);
                              zip(zos, newRelativePath, tempFile.getPath());
                          }
           else {
                              zipFile(zos, tempFile, relativePath);
                          }

                      }

                  }
           else {
                      zipFile(zos, file, relativePath);
                  }

              }


              
          /** *//**
               * 壓縮文件
               *
               * 
          @param zos
               *            壓縮輸出流
               * 
          @param file
               *            文件對象
               * 
          @param relativePath
               *            相對路徑
               * 
          @throws IOException
               * 
          @author terry.b.li
               
          */

              
          private static void zipFile(ZipOutputStream zos, File file,
                      String relativePath) 
          throws IOException {
                  ZipEntry entry 
          = new ZipEntry(relativePath + new String(file.getName().getBytes("ISO-8859-1")));
                  zos.putNextEntry(entry);
                  zos.setComment(
          "this is zip file luckystar");
                  InputStream is 
          = null;
                  
          try {
                      is 
          = new FileInputStream(file);
                      
          int BUFFERSIZE = 2 <<10;
                      
          int length =0;
                      
          byte[] buffer = new byte[BUFFERSIZE];
                      
          while ((length = is.read(buffer, 0, BUFFERSIZE)) >= 0{
                          zos.write(buffer, 
          0, length);
                      }

                      zos.flush();
                      zos.closeEntry();
                  }
           catch (IOException ex) {
                      
          throw ex;
                  }
           finally {
                      
          if (null != is) {
                          is.close();
                      }

                  }

              }


              
          /** *//**
               * 創建目錄
               *
               * 
          @param zos
               *            zip輸出流
               * 
          @param relativePath
               *            相對路徑
               * 
          @throws IOException
               * 
          @author terry.b.li
               
          */

              
          private static void createZipNode(ZipOutputStream zos, String relativePath)
                      
          throws IOException {
                  ZipEntry zipEntry 
          = new ZipEntry(relativePath);
                  zos.putNextEntry(zipEntry);
                  zos.closeEntry();
              }


              
          /** *//**
               * 解壓縮zip包
               *
               * 
          @param zipFilePath
               *            zip文件路徑
               * 
          @param targetPath
               *            解壓縮到的位置,如果為null或空字符串則默認解壓縮到跟zip包同目錄跟zip包同名的文件夾下
               * 
          @throws IOException
               * 
          @author terry.b.li
               
          */

              
          public static void unzip(String zipFilePath, String targetPath)
                      
          throws IOException {
                  OutputStream os 
          = null;
                  InputStream is 
          = null;
                  ZipFile zipFile 
          = null;
                  
          try {
                      zipFile 
          = new ZipFile(zipFilePath);
                      String directoryPath 
          = "";
                      
          if (null == targetPath || "".equals(targetPath)) {
                          directoryPath 
          = zipFilePath.substring(0, zipFilePath
                                  .lastIndexOf(
          "."));
                      }
           else {
                          directoryPath 
          = targetPath;
                      }

          //            Enumeration entryEnum = zipFile.getEntries();
                      Enumeration entryEnum = zipFile.entries();
                      
          if (null != entryEnum) {
                          ZipEntry zipEntry 
          = null;
                          
          while (entryEnum.hasMoreElements()) {
                              zipEntry 
          = (ZipEntry) entryEnum.nextElement();
                              
          if (zipEntry.isDirectory()) {
                                  directoryPath 
          = directoryPath + File.separator
                                          
          + zipEntry.getName();
                                  System.out.println(directoryPath);
                                  
          continue;
                              }

                              
          if (zipEntry.getSize() > 0{
                                  
          // 文件
                                  File targetFile = FileUtil.buildFile(directoryPath
                                          
          + File.separator + zipEntry.getName(), false);
                                  os 
          = new BufferedOutputStream(new FileOutputStream(
                                          targetFile));
                                  is 
          = zipFile.getInputStream(zipEntry);
                                  
          byte[] buffer = new byte[406];
                                  
          int readLen = 0;
                                  
          while ((readLen = is.read(buffer, 04096)) >= 0{
                                      os.write(buffer, 
          0, readLen);
                                  }


                                  os.flush();
                                  os.close();
                              }
           else {
                                  
          // 空目錄
                                  FileUtil.buildFile(directoryPath + File.separator
                                          
          + zipEntry.getName(), true);
                              }

                          }

                      }

                  }
           catch (IOException ex) {
                      
          throw ex;
                  }
           finally {
                      
          if(null != zipFile){
                          zipFile 
          = null;
                      }

                      
          if (null != is) {
                          is.close();
                      }

                      
          if (null != os) {
                          os.close();
                      }

                  }

              }


              
          public static void main(String[] args) {
                  
          try {
                      ZipUtil.zip(
          "c:\\test.zip""""C:\\Documents and Settings\\Administrator\\桌面\\新建文件夾");
                      System.out.println(
          "OK");
                  }
           catch (FileNotFoundException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
           catch (IOException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  }

              }

          }


          posted on 2008-12-07 11:03 禮物 閱讀(755) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 远安县| 铁岭县| 报价| 卢湾区| 南宁市| 宜黄县| 马公市| 安阳市| 巧家县| 鄂伦春自治旗| 张掖市| 龙州县| 扎囊县| 金川县| 乌鲁木齐县| 大英县| 南岸区| 合阳县| 荣昌县| 泰兴市| 赣榆县| 虞城县| 海安县| 正宁县| 社旗县| 怀来县| 台东市| 东兴市| 垣曲县| 晋宁县| 沂源县| 谢通门县| 舞阳县| 思南县| 林西县| 长武县| 恭城| 肥东县| 建阳市| 台湾省| 宁蒗|