`

采用org.apache.tools.zip来进行zip包的解压缩,支持目录嵌套和中文名

    博客分类:
  • Java
阅读更多

一篇关于zip包的解压缩,支持目录嵌套和文件目录的中文名,也算补上上次的只压不解,(注意先倒入ant.jar这个包,同时要确认ant.jar包中有org.apache.tools.zip):

import java.io.*;
public class DeCompressBook {
    public DeCompressBook() {
    }

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 {
      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("unziping " + zipEntry.getName());
        if (zipEntry.isDirectory()) {
          String name = zipEntry.getName();
          name = name.substring(0, name.length() - 1);
          File f = new File(outputDirectory + File.separator + name);
          f.mkdir();
          System.out.println("创建目录:" + 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();
        }
      }
       }
    catch (Exception ex) {
      System.out.println(ex.getMessage());
    }
        
    }
}

分享到:
评论
2 楼 飞天奔月 2011-07-15  
if (zipEntry.isDirectory()) { 
           //这段都可以不要,因为每次都貌似从最底层开始遍历的 
           loadFile.mkdirs(); 
       }
这句是要的

moshalanye 写道
  你写复杂了!
     static void unZip(File file,String loadFold) throws IOException {

        byte b[] = new byte[1024];
        int length;

        org.apache.tools.zip.ZipFile zipFile = new org.apache.tools.zip.ZipFile(file);
        java.util.Enumeration enumeration = zipFile.getEntries();
        org.apache.tools.zip.ZipEntry zipEntry = null;

        while (enumeration.hasMoreElements()) {
            zipEntry = (org.apache.tools.zip.ZipEntry) enumeration.nextElement();
            File loadFile = new File(loadFold+zipEntry.getName());

            if (zipEntry.isDirectory()) {
                //这段都可以不要,因为每次都貌似从最底层开始遍历的
                loadFile.mkdirs();
            } else {
                if (!loadFile.getParentFile().exists())
                    loadFile.getParentFile().mkdirs();

                OutputStream outputStream = new FileOutputStream(loadFile);
                InputStream inputStream = zipFile.getInputStream(zipEntry);


                while ((length = inputStream.read(b)) > 0)        
                    outputStream.write(b, 0, length);        

            }
 
        }
    }



1 楼 moshalanye 2009-01-07  
  你写复杂了!
     static void unZip(File file,String loadFold) throws IOException {

        byte b[] = new byte[1024];
        int length;

        org.apache.tools.zip.ZipFile zipFile = new org.apache.tools.zip.ZipFile(file);
        java.util.Enumeration enumeration = zipFile.getEntries();
        org.apache.tools.zip.ZipEntry zipEntry = null;

        while (enumeration.hasMoreElements()) {
            zipEntry = (org.apache.tools.zip.ZipEntry) enumeration.nextElement();
            File loadFile = new File(loadFold+zipEntry.getName());

            if (zipEntry.isDirectory()) {
                //这段都可以不要,因为每次都貌似从最底层开始遍历的
                loadFile.mkdirs();
            } else {
                if (!loadFile.getParentFile().exists())
                    loadFile.getParentFile().mkdirs();

                OutputStream outputStream = new FileOutputStream(loadFile);
                InputStream inputStream = zipFile.getInputStream(zipEntry);


                while ((length = inputStream.read(b)) > 0)        
                    outputStream.write(b, 0, length);        

            }
 
        }
    }


相关推荐

    org.apache.tools.zip.*文件打包需要的jar包

    import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; import org.apache.tools.zip.ZipOutputStream; 需要的jar包,压缩zip包和解压zip包,远程打包,文件批量下载、文件批量上传

    org.apache.tools.zip.*需要的jar包

    主要使用该jar包中的以下类: org.apache.tools.zip.ZipEntry; org.apache.tools.zip.ZipFile; org.apache.tools.zip.ZipOutputStream;

    org.apache.tools.zip解决解压乱码问题

    import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; import org.apache.tools.zip.ZipOutputStream; /** * * 类名: ZipUtil.java * 描述:压缩/解压缩zip包处理类 * 创建...

    org.apache.tools.*的jar包,ant-build.jar

    import org.apache.tools.*; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; 等

    ant-1.7.1(org.apache.tools.zip.ZipOutputStream).zip

    这个版本包含了对Zip文件格式的支持,其中`org.apache.tools.zip.ZipOutputStream`是Ant用来创建Zip压缩文件的核心类。在处理中文文件名时,可能会遇到乱码问题,这是由于字符编码不一致所导致的。 描述中提到的...

    java压缩中文处理使用org.apache.tools.zip已经打包成jar

    java压缩中文处理使用org.apache.tools.zip已经打包成jar 只要放在LIB文件夹下,然后在JSP 或 JAVA 里引用即可。 &lt;%@ page language="java" import="java.sql.*,java.io.*,org.apache.tools.zip.Zip" pageEncoding=...

    org.apache.tools.zip

    下面我们将深入探讨如何使用Java和`org.apache.tools.zip`进行文件的压缩和解压缩。 1. **创建ZIP文件** 创建ZIP文件的核心类是`java.util.zip.ZipOutputStream`,而`org.apache.tools.zip`提供了更高级别的抽象,...

    org.apache.http.legacy.zip

    1:下载 org.apache.http.legacy.jar这个jar包。放置到程序app--&gt;libs目录下 2:打开build.gradle文件,在android节点下添加:useLibrary 'org.apache.http.legacy' 重新编辑即可。 Eclipse解决办法: 直接将org...

    org.apache.tools.zip.*和org.apache.commons.httpclient.*实现远程文件打包下载,支持中文文件名

    这篇博客“org.apache.tools.zip.*和org.apache.commons.httpclient.*实现远程文件打包下载,支持中文文件名”探讨了如何利用Apache开源库来实现这个功能。Apache的`tools.zip`和`commons-httpclient`模块为开发者...

    java压缩使用org.apache.tools.zip包解决中文文件名

    http://mirror.bjtu.edu.cn/apache//ant/source/apache-ant-1.8.2-src.zip 使用我自己包,直接放到WEB-INF\classes下解压即可, 在程序中加上 outf.setEncoding("gbk");即可 下面是我的多个文件压缩成一个的压缩...

    org.apache.http源代码和jar包

    该jar包包含: import org.apache.http.Header; import org.apache....解压缩后,将lib文件夹下的jar所有jar包导入到eclipse工程的libs中; 可以解决Android-SDK新更新之后,使用http缺少org.apache.http的一些问题.

    org.apache.poi jar包

    org.apache.poi JAR包,解决个人的 import org.apache.commons.beanutils.PropertyUtilsBean; import org.apache.commons.lang.StringUtils; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi...

    org.apache.commons.lang jar包下载(commons-lang3-3.1.jar)

    org.apache.commons.lang.BitField.class org.apache.commons.lang.BooleanUtils.class org.apache.commons.lang.CharEncoding.class org.apache.commons.lang.CharRange.class org.apache.commons.lang.CharSet...

    org.apache.tools.*需要的ant.jar包

    标题中的"org.apache.tools.*需要的ant.jar包"指的是Apache Ant的核心库,这个库包含了`org.apache.tools`包下的一系列类和接口,它们是Ant运行时不可或缺的部分。在Java项目中,如果你需要通过代码来调用Ant进行...

    org.apache.http包

    import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.HttpVersion; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; ...

    org.apache.http.httpentity jar包-系列jar包

    import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.conn.scheme.Scheme; ...

    ant.jar下载

    org.apache.tools.zip.ZipEntry org.apache.tools.zip.ZipShort org.apache.tools.ant.XmlLogger org.apache.tools.tar.TarBuffer org.apache.tools.zip.JarMarker org.apache.tools.zip.ZipFile$1 org.apache...

    org.apache.http jar包

    org.apache.http jar包 import org.apache.http.Header; import org.apache.http.HttpException; import org.apache.http.HttpRequest; import org.apache.http.HttpRequestInterceptor; import org....

    org.apache.poi JAR包

    org.apache.poi JAR包,解决个人的 import org.apache.commons.beanutils.PropertyUtilsBean; import org.apache.commons.lang.StringUtils; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi...

Global site tag (gtag.js) - Google Analytics