zoukankan      html  css  js  c++  java
  • Android 解压zip文件

    过了n多天后,当再次使用原先博客上写的那篇:

    Android 压缩解压zip文件

    去做zip包的解压的时候,出现了原来没有发现的很多问题。首先是中文汉字问题,使用java的zip包不能很好的解决解压问题;其次还有

    getRealFileName()内的那个判断:
    由之前的"if(dirs.length >1)" 如果是 >1 的话,对于一些文件不能够解压,修改为:
    if(dirs.length>0)

    对于zip压缩包内包含中文目录或者中文文件的话,参考网上的资源:
    “使用apache的zip工具包(所在包为ant.jar )代替JDK的zip工具包,因为java类型自带的不支持中文路径,不过两者使用的方式是一样的,只是apache压缩工具多了设置编码方式的接口,其他基本上是一样的。”

    如果android下想使用 apache 需要导入 ant.jar 这个包,下面附上下载链接:
    http://download.csdn.net/detail/shizhending/4139787

    对于android 工程添加 jar 包的方法也提供一下入口吧:
    http://hi.baidu.com/yore2003/item/fb6d5cd21a4bec4dddf9bef2

    上面讲到的添加 jar 要注意下最好是:
    右键工程->properties->Java Build Path->Order and Export 
    然后把刚才加的 Libray jar 置顶。

    下面是使用apache zip工具包的具体源码:
    复制代码
     1 public static void    unZipFile(String archive, String decompressDir)throws IOException, FileNotFoundException, ZipException 
     2     {
     3         BufferedInputStream bi;
     4         ZipFile zf = new ZipFile(archive, "GBK");
     5         Enumeration e = zf.getEntries();
     6         while (e.hasMoreElements()) 
     7         {
     8             ZipEntry ze2 = (ZipEntry) e.nextElement();
     9             String entryName = ze2.getName();
    10             String path = decompressDir + "/" + entryName;
    11             if (ze2.isDirectory()) 
    12             {
    13                 System.out.println("正在创建解压目录 - " + entryName);
    14                 File decompressDirFile = new File(path);
    15                 if (!decompressDirFile.exists()) 
    16                 {
    17                     decompressDirFile.mkdirs();
    18                 }
    19             } else 
    20             {
    21                 System.out.println("正在创建解压文件 - " + entryName);
    22                 String fileDir = path.substring(0, path.lastIndexOf("/"));
    23                 File fileDirFile = new File(fileDir);
    24                 if (!fileDirFile.exists())
    25                 {
    26                     fileDirFile.mkdirs();
    27                 }
    28                 BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(decompressDir + "/" + entryName));
    29                 bi = new BufferedInputStream(zf.getInputStream(ze2));
    30                 byte[] readContent = new byte[1024];
    31                 int readCount = bi.read(readContent);
    32                 while (readCount != -1) 
    33                 {
    34                     bos.write(readContent, 0, readCount);
    35                     readCount = bi.read(readContent);
    36                 }
    37                 bos.close();
    38                 }
    39         }
    40         zf.close();
    41         //bIsUnzipFinsh = true;
    42     }
    复制代码

    同样记得要在AndroidManifest.xml里添加权限。

  • 相关阅读:
    Bootstrap 2.2.2 的新特性
    Apache POI 3.9 发布,性能显著提升
    SQL Relay 0.48 发布,数据库中继器
    ProjectForge 4.2.0 发布,项目管理系统
    红帽企业 Linux 发布 6.4 Beta 版本
    红薯 快速的 MySQL 本地和远程密码破解
    MariaDB 宣布成立基金会
    Percona XtraBackup 2.0.4 发布
    Rocks 6.1 发布,光盘机群解决方案
    精通Servlet研究,HttpServlet的实现追究
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3206675.html
Copyright © 2011-2022 走看看