隨筆 - 117  文章 - 72  trackbacks - 0

          聲明:原創(chuàng)作品(標(biāo)有[原]字樣)轉(zhuǎn)載時(shí)請(qǐng)注明出處,謝謝。

          常用鏈接

          常用設(shè)置
          常用軟件
          常用命令
           

          訂閱

          訂閱

          留言簿(7)

          隨筆分類(lèi)(130)

          隨筆檔案(123)

          搜索

          •  

          積分與排名

          • 積分 - 155852
          • 排名 - 389

          最新評(píng)論

          import java.io.*;
          import org.apache.tools.zip.*;
          import java.util.Enumeration;
          /**
          *功能:zip壓縮、解壓(支持中文文件名)
          *說(shuō)明:本程序通過(guò)使用Apache Ant里提供的zip工具org.apache.tools.zip實(shí)現(xiàn)了zip壓縮和解壓功能.
          *   解決了由于java.util.zip包不支持漢字的問(wèn)題。
          *   使用java.util.zip包時(shí),當(dāng)zip文件中有名字為中文的文件時(shí),
          *   就會(huì)出現(xiàn)異常:"Exception  in thread "main " java.lang.IllegalArgumentException  
          *               at   java.util.zip.ZipInputStream.getUTF8String(ZipInputStream.java:285)
          *注意:
          *   1、使用時(shí)把a(bǔ)nt.jar放到classpath中,程序中使用import org.apache.tools.zip.*;
          *   2、Apache Ant 下載地址:[url]http://ant.apache.org/[/url]
          *   3、Ant ZIP API:[url]http://www.jajakarta.org/ant/ant-1.6.1/docs/mix/manual/api/org/apache/tools/zip/[/url]
          *   4、本程序使用Ant 1.7.1 中的ant.jar
          *
          *僅供編程學(xué)習(xí)參考.
          *
          *@author Winty
          *@date   2008-8-3
          *@Usage:
          *   壓縮:java AntZip -zip "directoryName"
          *   解壓:java AntZip -unzip "fileName.zip"
          */


          public class AntZip{
              private ZipFile         zipFile;
              private ZipOutputStream zipOut;     //壓縮Zip
              private ZipEntry        zipEntry;
              private static int      bufSize;    //size of bytes
              private byte[]          buf;
              private int             readedBytes;
              
              public AntZip(){
                  this(512);
              }

              public AntZip(int bufSize){
                  this.bufSize = bufSize;
                  this.buf = new byte[this.bufSize];
              }
              
              //壓縮文件夾內(nèi)的文件
              public void doZip(String zipDirectory){//zipDirectoryPath:需要壓縮的文件夾名
                  File file;
                  File zipDir;

                  zipDir = new File(zipDirectory);
                  String zipFileName = zipDir.getName() + ".zip";//壓縮后生成的zip文件名

                  try{
                      this.zipOut = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFileName)));
                      handleDir(zipDir , this.zipOut);
                      this.zipOut.close();
                  }catch(IOException ioe){
                      ioe.printStackTrace();
                  }
              }

              //由doZip調(diào)用,遞歸完成目錄文件讀取
              private void handleDir(File dir , ZipOutputStream zipOut)throws IOException{
                  FileInputStream fileIn;
                  File[] files;

                  files = dir.listFiles();
              
                  if(files.length == 0){//如果目錄為空,則單獨(dú)創(chuàng)建之.
                      //ZipEntry的isDirectory()方法中,目錄以"/"結(jié)尾.
                      this.zipOut.putNextEntry(new ZipEntry(dir.toString() + "/"));
                      this.zipOut.closeEntry();
                  }
                  else{//如果目錄不為空,則分別處理目錄和文件.
                      for(File fileName : files){
                          //System.out.println(fileName);

                          if(fileName.isDirectory()){
                              handleDir(fileName , this.zipOut);
                          }
                          else{
                              fileIn = new FileInputStream(fileName);
                              this.zipOut.putNextEntry(new ZipEntry(fileName.toString()));

                              while((this.readedBytes = fileIn.read(this.buf))>0){
                                  this.zipOut.write(this.buf , 0 , this.readedBytes);
                              }

                              this.zipOut.closeEntry();
                          }
                      }
                  }
              }

              //解壓指定zip文件
              public void unZip(String unZipfileName){//unZipfileName需要解壓的zip文件名
                  FileOutputStream fileOut;
                  File file;
                  InputStream inputStream;

                  try{
                      this.zipFile = new ZipFile(unZipfileName);

                      for(Enumeration entries = this.zipFile.getEntries(); entries.hasMoreElements();){
                          ZipEntry entry = (ZipEntry)entries.nextElement();
                          file = new File(entry.getName());

                          if(entry.isDirectory()){
                              file.mkdirs();
                          }
                          else{
                              //如果指定文件的目錄不存在,則創(chuàng)建之.
                              File parent = file.getParentFile();
                              if(!parent.exists()){
                                  parent.mkdirs();
                              }

                              inputStream = zipFile.getInputStream(entry);

                              fileOut = new FileOutputStream(file);
                              while(( this.readedBytes = inputStream.read(this.buf) ) > 0){
                                  fileOut.write(this.buf , 0 , this.readedBytes );
                              }
                              fileOut.close();

                              inputStream.close();
                          }    
                      }
                      this.zipFile.close();
                  }catch(IOException ioe){
                      ioe.printStackTrace();
                  }
              }

              //設(shè)置緩沖區(qū)大小
              public void setBufSize(int bufSize){
                  this.bufSize = bufSize;
              }

              //測(cè)試AntZip類(lèi)
              public static void main(String[] args)throws Exception{
                  if(args.length==2){
                      String name = args[1];
                      AntZip zip = new AntZip();

                      if(args[0].equals("-zip"))
                          zip.doZip(name);
                      else if(args[0].equals("-unzip"))
                          zip.unZip(name);
                  }
                  else{
                      System.out.println("Usage:");
                      System.out.println("壓縮:java AntZip -zip directoryName");
                      System.out.println("解壓:java AntZip -unzip fileName.zip");
                      throw new Exception("Arguments error!");
                  }
              }
          }

          文章來(lái)源:http://wintys.blog.51cto.com/425414/90878
          ant1.7.1.jar下載
          posted on 2009-03-18 12:02 天堂露珠 閱讀(3531) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Java
          主站蜘蛛池模板: 松江区| 黄冈市| 鄂托克前旗| 尉犁县| 吐鲁番市| 奉新县| 新晃| 崇礼县| 怀安县| 西安市| 汶川县| 洛南县| 建水县| 仙游县| 宁海县| 库尔勒市| 汉中市| 休宁县| 综艺| 安乡县| 石泉县| 古田县| 昌都县| 二连浩特市| 商洛市| 大名县| 临邑县| 合川市| 青神县| 曲麻莱县| 扶沟县| 潼南县| 南溪县| 平武县| 邻水| 通山县| 靖江市| 农安县| 娱乐| 隆安县| 汝州市|