<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 0, comments - 77, trackbacks - 0, articles - 356
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    Zip解壓縮[轉(zhuǎn)]

    Posted on 2007-09-02 17:43 semovy 閱讀(722) 評(píng)論(0)  編輯  收藏 所屬分類: JAVA應(yīng)用

    需要的Ant.jar包
    package com.semovy.test;
    /*
    調(diào)用org.apache.tools.zip實(shí)現(xiàn)壓縮。
    夜可以使用java.util.zip不過如果是中文的話,
    解壓縮的時(shí)候文件名字會(huì)是亂碼。原因是解壓縮軟件的編碼格式跟
    java.util.zip.ZipInputStream的編碼字符集不同
    java.util.zip.ZipInputStream的字符集固定是UTF-8

    注銷的部分是解壓縮的代碼。
    */
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;

    import org.apache.tools.zip.ZipEntry;
    import org.apache.tools.zip.ZipFile;
    import org.apache.tools.zip.ZipOutputStream;

    /*
    * @作者:張華 @日期:2006-5-14 @說明:
    */
    public class ZipUtil {

    public void zip(String zipFileName, String inputFile) throws Exception {
     zip(zipFileName, new File(inputFile));
    }

    public void zip(String zipFileName, File inputFile) throws Exception {
     ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
       new String(zipFileName.getBytes("gb2312"))));
     System.out.println("zip start");
     zip(out, inputFile, "");
     System.out.println("zip done");
     out.close();
    }

    public void zip(ZipOutputStream out, File f, String base) throws Exception {
     System.out.println("Zipping  " + f.getName());
     if (f.isDirectory()) {
      File[] fl = f.listFiles();
      //out.putNextEntry(new ZipEntry(base + "/"));
      out.putNextEntry(new org.apache.tools.zip.ZipEntry(base + "/"));
      base = base.length() == 0 ? "" : base + "/";
      for (int i = 0; i < fl.length; i++) {
       zip(out, fl[i], base + fl[i].getName());
       System.out.println(fl[i].getName());
       //System.out.println(new String(fl[i].getName().getBytes("gb2312")));
      }
     } else {
      //out.putNextEntry(new ZipEntry(base));
      out.putNextEntry(new org.apache.tools.zip.ZipEntry(base));
      System.out.println(base);
      FileInputStream in = new FileInputStream(f);
      int b;

      while ((b = in.read()) != -1)
       out.write(b);
      in.close();
     }

    }

    private void createDirectory(String directory, String subDirectory) {
     String dir[];
     File fl = new File(directory);
     try {
      if (subDirectory == "" && fl.exists() != true)
       fl.mkdir();
      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)
         subFile.mkdir();
        directory += File.separator + dir[i];
       }
      }
     } catch (Exception ex) {
      System.out.println(ex.getMessage());
     }
    }

    public void unZip(String zipFileName, String outputDirectory)
      throws Exception {
     try {
      ZipFile zipFile = new ZipFile(zipFileName);
      java.util.Enumeration e = zipFile.getEntries();
      ZipEntry zipEntry = null;
      createDirectory(outputDirectory, "");
      while (e.hasMoreElements()) {
       zipEntry = (ZipEntry) e.nextElement();
       System.out.println("正在解壓: " + zipEntry.getName());
       String name= null;
       if (zipEntry.isDirectory()) {
        name = zipEntry.getName();
        name = name.substring(0, name.length() - 1);
        File f = new File(outputDirectory + File.separator + name);
        f.mkdir();
        System.out.println("創(chuàng)建目錄:" + outputDirectory + File.separator + name);
       } else {
        String fileName = zipEntry.getName();
        fileName = fileName.replace('\\', '/');
        // System.out.println("測試文件1:" +fileName);
        if (fileName.indexOf("/") != -1) {
         createDirectory(outputDirectory, fileName.substring(0,fileName.lastIndexOf("/")));
         fileName = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length());
        }

        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);
        }
        out.close();
        in.close();
       }
      
      }
     
      //刪除文件不能在這里刪,因?yàn)槲募谑褂茫瑧?yīng)在上傳那處刪
    //  解壓后,刪除壓縮文件
    //  File zipFileToDel = new File(zipFileName);
    //  zipFileToDel.delete();
    //  System.out.println("正在刪除文件:"+ zipFileToDel.getCanonicalPath());
     
    //  //刪除解壓后的那一層目錄
    //  delALayerDir(zipFileName, outputDirectory);
     
     } catch (Exception ex) {
      System.out.println(ex.getMessage());
     }

    }

    /**
     * 刪掉一層目錄
     * @param zipFileName
     * @param outputDirectory
     */
    public void delALayerDir(String zipFileName, String outputDirectory) {

     String[] dir = zipFileName.replace('\\', '/').split("/");
     String fileFullName = dir[dir.length - 1]; //得到aa.zip
     int pos = -1;
     pos = fileFullName.indexOf(".");
     String fileName = fileFullName.substring(0, pos); //得到aa
     String sourceDir = outputDirectory + File.separator + fileName;
     try {
      copyFile(new File(outputDirectory), new File(sourceDir), new File(sourceDir));

      deleteSourceBaseDir(new File(sourceDir));

     } catch (Exception e) {
      e.printStackTrace();
     }
    }

    /**
     * 將sourceDir目錄的文件全部copy到destDir中去
     */
    public void copyFile(File destDir, File sourceBaseDir, File sourceDir)
      throws Exception {

     File[] lists = sourceDir.listFiles();
     String line = null;
     String url = null;
     if(lists == null)
      return;
     for (int i = 0; i < lists.length; i++) {
      File f = lists[i];
      if (f.isFile()) {
       FileInputStream fis = new FileInputStream(f);
       String content = "";

       String sourceBasePath = sourceBaseDir.getCanonicalPath();
       String destPath = destDir.getCanonicalPath();
       String fPath = f.getCanonicalPath();
       String drPath = destDir
         + fPath.substring(fPath.indexOf(sourceBasePath)
           + sourceBasePath.length());
       FileOutputStream fos = new FileOutputStream(drPath);

       byte[] b = new byte[2048];
       while (fis.read(b) != -1) {
        if (content != null)
         content += new String(b);
        else
         content = new String(b);
        b = new byte[2048];
       }

       content = content.trim();
       fis.close();

       fos.write(content.getBytes());
       fos.flush();
       fos.close();

      } else {
       //先新建目錄
       new File(destDir + File.separator + f.getName()).mkdir();

       copyFile(destDir, sourceBaseDir, f); //遞歸調(diào)用
      }
     }
    }

    /**
     * 將sourceDir目錄的文件全部copy到destDir中去
     */
    public void deleteSourceBaseDir(File curFile) throws Exception {

     File[] lists = curFile.listFiles();
     String line = null;
     String url = null;
     File parentFile = null;
     for (int i = 0; i < lists.length; i++) {
      File f = lists[i];
      if (f.isFile()) {
       f.delete();
       //若它的父目錄沒有文件了,說明已經(jīng)刪完,應(yīng)該刪除父目錄
       parentFile = f.getParentFile();
       if (parentFile.list().length == 0)
        parentFile.delete();
      } else {
       deleteSourceBaseDir(f); //遞歸調(diào)用
      }
     }
    }

    public static void main(String[] args) {
     try {
      ZipUtil t = new ZipUtil();
      t.zip("c:\\1.zip", "c:\\1\\");
      t.unZip("c:\\1.zip", "c:\\2\\");
     
     } catch (Exception e) {
      e.printStackTrace(System.out);
     }
    }

    }

     

     

    主站蜘蛛池模板: 国产午夜不卡AV免费| 四虎影视精品永久免费网站| 青娱乐在线免费观看视频| 亚洲va久久久噜噜噜久久狠狠 | 亚洲成人中文字幕| 亚洲А∨精品天堂在线| 特级做A爰片毛片免费69| 777成影片免费观看| 91在线视频免费观看| 国产精品亚洲精品日韩电影| 亚洲五月综合缴情婷婷| 亚洲最新永久在线观看| 亚洲精品亚洲人成人网| 中文字幕精品亚洲无线码一区应用| 日韩视频免费在线| 西西大胆无码视频免费| 很黄很黄的网站免费的| 最近2019中文字幕免费大全5| 日韩精品无码免费专区午夜| 和老外3p爽粗大免费视频| 免费中文字幕视频| 国产亚洲人成在线影院| 在线亚洲v日韩v| 亚洲av色香蕉一区二区三区蜜桃| 亚洲最大的成人网| 伊人久久亚洲综合影院首页| 亚洲人成黄网在线观看| 亚洲一区二区三区播放在线| 亚洲欧洲校园自拍都市| 亚洲三级视频在线| 亚洲一区二区三区在线| 在线综合亚洲欧洲综合网站| 中文字幕亚洲男人的天堂网络| 亚洲性无码av在线| 亚洲91精品麻豆国产系列在线| 亚洲美女视频免费| 亚洲另类古典武侠| 中文字幕无码精品亚洲资源网久久 | 国产aⅴ无码专区亚洲av麻豆| 亚洲综合伊人久久大杳蕉| 亚洲精品无码av人在线观看|