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里添加权限。




  • 相关阅读:
    【翻译二十二】java-并发之集合与原子变量
    【翻译二十一】java-并发之分拆和合并
    【翻译二十】-java线程池
    【翻译十九】-java之执行器
    【翻译十八】java-并发之锁对象
    【翻译十七】java-并发之高性能对象
    【翻译十六】java-固定对象的定义方法
    【翻译十五】-java并发之固定对象与实例
    情人节-程序员的乐趣
    【翻译十四】java-并发之保护块儿
  • 原文地址:https://www.cnblogs.com/wainiwann/p/3196196.html
Copyright © 2011-2022 走看看