隨筆 - 117  文章 - 72  trackbacks - 0

          聲明:原創作品(標有[原]字樣)轉載時請注明出處,謝謝。

          常用鏈接

          常用設置
          常用軟件
          常用命令
           

          訂閱

          訂閱

          留言簿(7)

          隨筆分類(130)

          隨筆檔案(123)

          搜索

          •  

          積分與排名

          • 積分 - 155775
          • 排名 - 390

          最新評論

          import java.io.*;
          import org.apache.tools.zip.*;
          import java.util.Enumeration;
          /**
          *功能:zip壓縮、解壓(支持中文文件名)
          *說明:本程序通過使用Apache Ant里提供的zip工具org.apache.tools.zip實現了zip壓縮和解壓功能.
          *   解決了由于java.util.zip包不支持漢字的問題。
          *   使用java.util.zip包時,當zip文件中有名字為中文的文件時,
          *   就會出現異常:"Exception  in thread "main " java.lang.IllegalArgumentException  
          *               at   java.util.zip.ZipInputStream.getUTF8String(ZipInputStream.java:285)
          *注意:
          *   1、使用時把ant.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
          *
          *僅供編程學習參考.
          *
          *@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];
              }
              
              //壓縮文件夾內的文件
              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調用,遞歸完成目錄文件讀取
              private void handleDir(File dir , ZipOutputStream zipOut)throws IOException{
                  FileInputStream fileIn;
                  File[] files;

                  files = dir.listFiles();
              
                  if(files.length == 0){//如果目錄為空,則單獨創建之.
                      //ZipEntry的isDirectory()方法中,目錄以"/"結尾.
                      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{
                              //如果指定文件的目錄不存在,則創建之.
                              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();
                  }
              }

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

              //測試AntZip類
              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!");
                  }
              }
          }

          文章來源:http://wintys.blog.51cto.com/425414/90878
          ant1.7.1.jar下載
          posted on 2009-03-18 12:02 天堂露珠 閱讀(3531) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 体育| 金阳县| 喀喇沁旗| 津市市| 新巴尔虎左旗| 沛县| 定南县| 微山县| 郴州市| 信丰县| 泽州县| 于田县| 托里县| 即墨市| 襄汾县| 罗田县| 高平市| 蓬莱市| 门源| 阜宁县| 阿坝县| 平阳县| 安顺市| 黑河市| 义马市| 巧家县| 类乌齐县| 平阳县| 洞头县| 扶沟县| 绿春县| 牟定县| 博乐市| 宁波市| 克东县| 霍州市| 巴楚县| 永德县| 武隆县| 舒城县| 苏尼特左旗|