<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 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

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

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

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

    注銷(xiāo)的部分是解壓縮的代碼。
    */
    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 @說(shuō)明:
    */
    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("測(cè)試文件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();
       //若它的父目錄沒(méi)有文件了,說(shuō)明已經(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);
     }
    }

    }

     

     

    主站蜘蛛池模板: 成人黄动漫画免费网站视频| va天堂va亚洲va影视中文字幕| 免费看www视频| 99久9在线|免费| 国产精品青草视频免费播放| 亚洲AV无码一区二区三区性色| 久久久久亚洲AV无码专区首JN| 一本色道久久综合亚洲精品高清| 国内一级一级毛片a免费| 免免费国产AAAAA片| 亚洲啪啪免费视频| 无码av免费一区二区三区试看| 一本一道dvd在线观看免费视频| 妇女自拍偷自拍亚洲精品| 亚洲最大无码中文字幕| 亚洲av无码专区在线| 亚洲男人电影天堂| 亚洲精品成人久久| 亚洲人成网站影音先锋播放| 亚洲国产精品福利片在线观看| 狠狠色婷婷狠狠狠亚洲综合| 区三区激情福利综合中文字幕在线一区亚洲视频1| 国产高清视频在线免费观看| 妞干网在线免费观看| 国产成人免费高清激情视频| 永久免费av无码不卡在线观看| 久久久久久久91精品免费观看| 成人女人A级毛片免费软件| 综合在线免费视频| 在线看片免费不卡人成视频| 国产免费看JIZZ视频| av大片在线无码免费| 岛国av无码免费无禁网站| 手机在线免费视频| 精品久久免费视频| 俄罗斯极品美女毛片免费播放| 一区国严二区亚洲三区| 亚洲综合AV在线在线播放| 亚洲成AV人片在线观看ww| 亚洲国产精品久久久久婷婷软件| 亚洲熟妇av一区二区三区下载|