隨筆 - 117  文章 - 72  trackbacks - 0

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

          常用鏈接

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

          訂閱

          訂閱

          留言簿(7)

          隨筆分類(130)

          隨筆檔案(123)

          搜索

          •  

          積分與排名

          • 積分 - 156008
          • 排名 - 389

          最新評論

          import java.io.*;
          import java.util.zip.*;
          /**
          *功能:zip壓縮、解壓
          *說明:本程序通過ZipOutputStream和ZipInputStream實現了zip壓縮和解壓功能.
          *問題:由于java.util.zip包并不支持漢字,當zip文件中有名字為中文的文件時,
          *     就會出現異常:"Exception  in thread "main " java.lang.IllegalArgumentException  
          *               at   java.util.zip.ZipInputStream.getUTF8String(ZipInputStream.java:285)
          *解決:
          *  方法1、修改import java.util.zip.ZipInputStream和ZipOutputStream.
          *          java.util.zip只支持UTF-8,Ant里面可以指定編碼.
          *  方法2、使用Apache Ant里提供的zip工具。
          *          不使用java.util.zip的包,把ant.jar放到classpath中.
          *          程序中使用import org.apache.tools.zip.*;
          *
          *僅供編程學習參考.
          *
          *@author Winty
          *@date   2008-8-3
          *@Usage:
          *   壓縮:java Zip -zip "directoryName"
          *   解壓:java Zip -unzip "fileName.zip"
          */


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

              public Zip(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;

                  try{
                      this.zipIn = new ZipInputStream (new BufferedInputStream(new FileInputStream(unZipfileName)));

                      while((this.zipEntry = this.zipIn.getNextEntry()) != null){
                          file = new File(this.zipEntry.getName());
                          //System.out.println(file);///

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

                              fileOut = new FileOutputStream(file);
                              while(( this.readedBytes = this.zipIn.read(this.buf) ) > 0){
                                  fileOut.write(this.buf , 0 , this.readedBytes );
                              }
                              fileOut.close();
                          }
                          this.zipIn.closeEntry();    
                      }
                  }catch(IOException ioe){
                      ioe.printStackTrace();
                  }
              }

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

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

                      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 Zip -zip directoryName");
                      System.out.println("解壓:java Zip -unzip fileName.zip");
                      throw new Exception("Arguments error!");
                  }
              }
          }

          文章來源:http://wintys.blog.51cto.com/425414/90872
          posted on 2009-03-18 12:02 天堂露珠 閱讀(901) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 许昌市| 利辛县| 孙吴县| 富宁县| 昌乐县| 河北省| 奉化市| 曲水县| 崇阳县| 若羌县| 聂荣县| 孟津县| 德兴市| 迁安市| 高雄县| 禄丰县| 定南县| 两当县| 兴安县| 乳源| 东阿县| 兴化市| 安宁市| 尚志市| 陆河县| 奇台县| 蛟河市| 社旗县| 大竹县| 乌什县| 湖口县| 南康市| 义乌市| 南京市| 瓮安县| 平舆县| 建瓯市| 成武县| 龙岩市| 霍州市| 赞皇县|