J2EE社區(qū)

          茍有恒,何必三更起五更眠;
          最無益,只怕一日曝十日寒.
          posts - 241, comments - 318, trackbacks - 0, articles - 16

          java 解縮文件 zipFile支持中文

          Posted on 2009-10-30 22:28 xcp 閱讀(3299) 評論(2)  編輯  收藏 所屬分類: JAVA
                前面寫了一篇,java 壓縮文件 ZipOutputStream  支持中文,同樣java提供的java.util.zip.*.......對中文不支持面就是一個簡單的例子,注 需要導(dǎo)入ant.jar支持包.

              
          package cn.edu.cuit.disasterSystem.web.struts2.action;

          import java.io.File;
          import java.io.FileOutputStream;
          import java.io.InputStream;

          /**
           * 采用org.apache.tools.zip來進(jìn)行zip包的解壓縮,支持目錄嵌套和中文名
           * 
          @author xcp
           * 
          @version 1.0 Copyright (C), 2009 智能開發(fā)實(shí)驗(yàn)室 所有 Program Name:災(zāi)情信息管理系統(tǒng)
           *          Date: 2009-10-28 下午09:05:13
           
          */
          public class CompressFromZip {

              
          private void createDirectory(String directory, String subDirectory) {
                  String dir[];
                  File fl 
          = new File(directory);
                  
          try {
                      
          //如果解壓文件基本目錄結(jié)構(gòu)不存在,新建
                      if (subDirectory == "" && fl.exists() != true){
                          
          //System.out.println("*******創(chuàng)建基本目錄結(jié)構(gòu)*******"+directory);
                          fl.mkdir();
                      }
                      
          //主要創(chuàng)建子目錄
                      else if (subDirectory != "") {
                          dir 
          = subDirectory.replace('\\''/').split("/");
                          
          for (int i = 0; i < dir.length; i++) {
                              File subFile 
          = new File(directory + File.separator + dir[i]);
                              
          if (subFile.exists() == false){
                                  
          //System.out.println("*******創(chuàng)建子目錄*******"+directory + File.separator + dir[i]);
                                  subFile.mkdir();
                              }
                              directory 
          += File.separator + dir[i];
                          }
                      }
                  } 
          catch (Exception ex) {
                      System.out.println(ex.getMessage());
                  }
              }

              @SuppressWarnings(
          "unchecked")
              
          public void unZip(String zipFileName, String outputDirectory)
                      
          throws Exception {
                  
          try {
                      org.apache.tools.zip.ZipFile zipFile 
          = new org.apache.tools.zip.ZipFile(zipFileName);
                      java.util.Enumeration e 
          = zipFile.getEntries();
                      org.apache.tools.zip.ZipEntry zipEntry 
          = null;
                      createDirectory(outputDirectory, 
          "");
                      
          while (e.hasMoreElements()) {
                          zipEntry 
          = (org.apache.tools.zip.ZipEntry) e.nextElement();
                          System.out.println(
          "========== 解壓 ========== " + zipEntry.getName());
                          
          //判斷是否為一個文件夾
                          if (zipEntry.isDirectory()) {
                              String name 
          = zipEntry.getName().trim();
                              
          //因?yàn)楹竺鎺в幸粋€/,所有要去掉
                              name = name.substring(0, name.length() - 1);
                              File f 
          = new File(outputDirectory + File.separator + name);
                              
          if(!f.exists()){
                                  f.mkdir();
                              }
                              
          //System.out.println("*******創(chuàng)建根目錄*******" + outputDirectory    + File.separator + name);
                          } else {
                              String fileName 
          = zipEntry.getName();
                              fileName 
          = fileName.replace('\\''/');
                              
                              
          //判斷子文件是否帶有目錄,有創(chuàng)建,沒有寫文件
                              if (fileName.indexOf("/"!= -1){
                                  createDirectory(outputDirectory, fileName.substring(
          0,fileName.lastIndexOf("/")));
                                  fileName 
          = fileName.substring(fileName.lastIndexOf("/"+ 1);
                              }
                              
                              File f 
          = new File(outputDirectory + File.separator + zipEntry.getName());
                              f.createNewFile();
                              InputStream in 
          = zipFile.getInputStream(zipEntry);
                              FileOutputStream out 
          = new FileOutputStream(f);

                              
          byte[] by = new byte[1024];
                              
          int c;
                              
          while ((c = in.read(by)) != -1) {
                                  out.write(by, 
          0, c);
                              }
                              in.close();
                              out.close();
                              
                          }
                      }
                  } 
          catch (Exception ex) {
                      System.out.println(ex.getMessage());
                  }
                  System.out.println(
          "^^^^^^^^^^ 解壓完成 ^^^^^^^^^^");
              }

              
          public static void main(String[] args) {
                  CompressFromZip test 
          = new CompressFromZip();
                  
          try {
                      test.unZip(
          "d:\\批量打包.zip""d:\\temp");
                  } 
          catch (Exception e) {
                      e.printStackTrace();
                  }
              }
          }



          名稱: ?4C.ESL | .↗Evon
          口號: 遇到新問題?先要尋找一個方案乄而不是創(chuàng)造一個方案こ
          mail: 聯(lián)系我


          Feedback

          # re: java 解縮文件 zipFile支持中文  回復(fù)  更多評論   

          2009-11-04 14:50 by 梁章坪
          有用工具,摘下來了。不建議把!
          謝謝!

          # re: java 解縮文件 zipFile支持中文  回復(fù)  更多評論   

          2009-11-04 21:48 by xcp
          @梁章坪
          沒事得.大家相互學(xué)習(xí).
          主站蜘蛛池模板: 新竹市| 年辖:市辖区| 金堂县| 苏尼特右旗| 四川省| 西和县| 綦江县| 河北区| 那坡县| 尼木县| 宜黄县| 绵竹市| 札达县| 千阳县| 陕西省| 太白县| 丹巴县| 荣昌县| 樟树市| 宜春市| 利津县| 葫芦岛市| 朝阳市| 盖州市| 定州市| 洛浦县| 台江县| 繁昌县| 天津市| 苍溪县| 武川县| 寻甸| 汉源县| 邯郸县| 武穴市| 昔阳县| 和林格尔县| 义马市| 千阳县| 和田市| 延安市|