文档章节

安卓Zip解压文件乱码的问题解决

ThankSars
 ThankSars
发布于 2017/09/06 17:12
字数 483
阅读 54
收藏 1

日常描述下问题点的发生,如有雷同的朋友可以往下看看能不能对你解决问题有帮助

工程接手迭代,有一个功能使用下载文件压缩包并进行解压,在这里文件名就出现乱码,这里解释一下原因,上一个开发使用Apache的ant包里面的ZipFile,这个类是挺完善的,解压可以设置编码格式,所以旧工程并没有乱码情况

ZipFile zf = new ZipFile(strZipPath,"GBK");

这里我嫌ant包太臃肿,而且导致编译速度非常慢,于是我这里改用java.util.zip.ZipFile这个类,但是这个类并不完善,1.6之前的版本不提供编码设置,默认UTF-8,这样在无法放弃1.6版本以下用户的情况下就出现了乱码情况。

ps.linux系统压缩文件默认UTF-8,windows系统默认GBK

在这里我就只能移除的ant包拿回来用,那现在的问题就是包臃肿和编译问题,这里我将ant包解压,去掉zip有关class外的其他文件,只留下我需要调用的class,ant.jar\org\apache\tools文件夹下只留zip文件夹,其他移除便可。(如有更优雅的方式还望各路大神指点,不胜感激)

下面贴一下解压代码

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.Enumeration;

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

public class ZipHelper {
   public static boolean unZip(String strZipPath, String strOutputFolderPath) {
      ZipFile zf = null;
      try {
         zf = new ZipFile(strZipPath,"GBK");
         for (@SuppressWarnings("unchecked")
         Enumeration<ZipEntry> entries = zf.getEntries(); 
               entries.hasMoreElements();) {

            final ZipEntry entry = entries.nextElement();

            final File file = new File(strOutputFolderPath + File.separator + entry.getName());

            if (entry.isDirectory()) {
               file.mkdirs();
            } else {
               FileOutputStream fos = null;
               try{
                  fos = new FileOutputStream(file);
               }catch(Exception e){
                  File fileParent = file.getParentFile();
                  if(!fileParent.exists()){
                     if(fileParent.mkdirs()){
                        fos = new FileOutputStream(file);
                     }
                  }
               }
               
               if(fos != null){
                  InputStream is = null;
                  try{
                     is = zf.getInputStream(entry);
                     int nReadLength = -1;
                     final byte buffer[] = new byte[4096];
                     while((nReadLength = is.read(buffer)) != -1){
                        fos.write(buffer, 0, nReadLength);
                     }
                  }finally{
                     fos.close();
                     is.close();
                  }
               }
            }
         }
         
         return true;
      } catch (Exception e) {
         e.printStackTrace();
      } finally{
         if(zf != null){
            try{
               zf.close();
            }catch(Exception e){
               e.printStackTrace();
            }
         }
      }
      
      return false;
   }
}

© 著作权归作者所有

ThankSars
粉丝 0
博文 3
码字总数 779
作品 0
广州
Android工程师
私信 提问
文件管理器-android源代码

代码介绍: 以下是对文件管理器android源代码程序功能介绍如下: 功能说明:图片预览 图标异步加载 双击拖曳改为搜索键拖曳 添加intent动作可以获取文件名 (在设置->APK备份目录 有体现) ...

长平狐
2012/08/14
531
1
文件管理器-android源代码

代码介绍: 以下是对文件管理器android源代码程序功能介绍如下: 功能说明:图片预览 图标异步加载 双击拖曳改为搜索键拖曳 添加intent动作可以获取文件名 (在设置->APK备份目录 有体现) ...

长平狐
2012/08/09
545
0
KodExplorer 3.45 发布,在线解压缩,压缩文件预览支持

KodExplorer 3.45 发布了。KodExplorer是款开源的Web在线文件管理、代码编辑器。它提供了类windows经典用户界面,一整套在线文件管理、文件预览、编辑、上传下载、在线解压缩、音乐播放功能。...

雾渺
2017/04/14
1K
16
Android逆向工程之apk加固后反编译AndroidManifest.xml

版权声明:本文为Zhang Phil原创文章,请不要转载! https://blog.csdn.net/zhangphil/article/details/83858027 Android逆向工程之apk加固后反编译AndroidManifest.xml Android编译生成的a...

zhangphil
2018/11/08
0
0
folder failed to be renamed or moved on SDK install

在windows 7 64位的环境下配置一些开发环境比较难受,问题也很多,建议要开发,尽量不要选择这个版本。 下面说一下解决这个问题的办法: 第一种方法(网络上的方法,我没有成功): 1, 复制 ...

ryany
2011/02/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

再一次生产 CPU 高负载排查实践

前言 前几日早上打开邮箱收到一封监控报警邮件:某某 ip 服务器 CPU 负载较高,请研发尽快排查解决,发送时间正好是凌晨。 其实早在去年我也处理过类似的问题,并记录下来:《一次生产 CPU ...

crossoverJie
27分钟前
1
0
Java的线程同步和并发问题示例

并发问题 多线程是一个非常强大的工具,它使我们能够更好地利用系统的资源,但我们需要在读取和写入多个线程共享的数据时特别小心。 当多个线程尝试同时读取和写入共享数据时,会出现两种类型...

hiuh
今天
4
0
Spring Boot 常用注解说明

实体类 @Entity (实体类注解) @Table(可指定表名) @Data(可缺省get/set) @Id(指定属性主键) @GeneratedValue(指定主键生成规则) @Transient(表示此数据不在数据库表里建立属性) ...

兜兜毛毛
今天
3
0
局域网能互相ping通,ubuntu虚拟机不能上外网

【问题】 桥接模式老是无法上网,查看本机IP发现被分配了一个私网地址,猜测应该是虚拟DHCP服务器没有打开,于是查看Ubuntu的网络配置: /etc/network/interfaces 发现没有dhcp配置的信息,只...

tahiti_aa
今天
2
0
以太坊助记词PHP开发包简介

以太坊助记词PHP开发包用来为PHP以太坊应用增加助记词和层级确定密钥支持能力。下载地址:以太坊助记词php开发包 。 1、开发包概述 以太坊助记词PHP开发包主要包括以下特性: 生成符合BIP39...

汇智网教程
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部