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
          主站蜘蛛池模板: 巩留县| 婺源县| 乐安县| 常熟市| 信丰县| 枣庄市| 深泽县| 莆田市| 英德市| 都匀市| 新巴尔虎右旗| 石景山区| 包头市| 黑山县| 平遥县| 天镇县| 大庆市| 木里| 广南县| 白河县| 会理县| 南平市| 甘孜| 山阳县| 巫山县| 潢川县| 饶阳县| 兴安县| 木兰县| 从江县| 吕梁市| 仙游县| 南部县| 额敏县| 满洲里市| 峨边| 探索| 闸北区| 淮安市| 额济纳旗| 明光市|