android 代码解压,Android开发之旅-解压压缩zip文件(带子目录和中文路径)
今天弄了一下午解压的问题,需求嘛,把自己踩过的坑记录下来,也为了跟我一样的新人少坑的路。
怎么那么多的屁话,上代码啊!
上解压的代码:
//第一个参数就是需要解压的文件,第二个就是解压的目录
public static boolean upZipFileDir(File zipFile, String folderPath) {
ZipFile zfile= null;
try {
//转码为GBK格式,支持中文
zfile = new ZipFile(zipFile,"GBK");
} catch (IOException e) {
e.printStackTrace();
return false;
}
Enumeration zList=zfile.getEntries();
ZipEntry ze=null;
byte[] buf=new byte[1024];
while(zList.hasMoreElements()){
ze=(ZipEntry)zList.nextElement();
//列举的压缩文件里面的各个文件,判断是否为目录
if(ze.isDirectory()){
String dirstr = folderPath + ze.getName();
dirstr.trim();
File f=new File(dirstr);
f.mkdir();
continue;
}
OutputStream os= null;
FileOutputStream fos = null;
// ze.getName()会返回 script/start.script这样的,是为了返回实体的File
File realFile = getRealFileName(folderPath, ze.getName());
try {
fos = new FileOutputStream(realFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
return false;
}
os = new BufferedOutputStream(fos);
InputStream is= null;
try {
is = new BufferedInputStream(zfile.getInputStream(ze));
} catch (IOException e) {
e.printStackTrace();
return false;
}
int readLen=0;
//进行一些内容复制操作
try {
while ((readLen=is.read(buf, 0, 1024))!=-1) {
os.write(buf, 0, readLen);
}
} catch (IOException e) {
e.printStackTrace();
return false;
}
try {
is.close();
os.close();
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
try {
zfile.close();
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
/**
* 给定根目录,返回一个相对路径所对应的实际文件名.
* @param baseDir 指定根目录
* @param absFileName 相对路径名,来自于ZipEntry中的name
* @return java.io.File 实际的文件
*/
public static File getRealFileName(String baseDir, String absFileName){
String[] dirs=absFileName.split("/");
File ret = new File(baseDir);
String substr = null;
if(dirs.length>1){
for (int i = 0; i < dirs.length-1;i++) {
substr = dirs[i];
ret=new File(ret, substr);
}
if(!ret.exists())
ret.mkdirs();
substr = dirs[dirs.length-1];
ret=new File(ret, substr);
return ret;
}else{
ret = new File(ret,absFileName);
}
return ret;
}
记得别用系统提供的java.util.zip.ZipFile这个类,没办法支持中文的。
去下载 ZipEntry.jar引用到项目中即可。
android 代码解压,Android开发之旅-解压压缩zip文件(带子目录和中文路径)相关推荐
- Android App Bundles相关概念及开发流程详解
本文会根据官网的介绍,结合自己的一些理解,来阐述Android App Bundles的相关概念和开发流程. 主要参考文章如下. https://developer.android.com/guide ...
- android 代码打开权限,android开发权限询问的示例代码
现在基于信息安全问题,特别是版本是23以上权限越严格. 特别是拍照,读,写权限 一般权限允许过,下次就不用询问了的,所以很多应用都喜欢在首页或者启动页直接询问,不允许的就用不了1.下面给出封装好的类, ...
- Android代码混淆方法,Android 代码混淆零基础入门
内容提要 本篇文章主要有三个部分,让读者读完后能自己写规则混淆项目 对Android代码怎么开启混淆做一个简单的介绍. 对混淆规则做一个简单介绍: 在混淆过后Crash日志反推代码工具retrace. ...
- android代码说明文档,android:label说明
文章目录 1. 说明 android:label 用于app 在切换activity的时候,自动更换左上角的显示 2. 代码架构 3. String.xml 字符串资源文件My Application ...
- android 代码加view,Android中将View添加至窗口的源码分析
本文主要内容是讲解一个视图View或者一个ViewGroup对象是如何添加至应用程序窗口中的.下文中提到的窗口可泛指我们能看到的界面,包括一个Activity呈现的界面(我们可以将之理解为应用程序窗口 ...
- android 代码签名apk,[Android]混淆代码后生成带签名的apk
Android从2.3的SDK开始,将ProGuard混淆代码的功能加入了进来. 我们可以从android sdk的tools目录下看到有一个proguard目录.说明具有了代码混淆的功能. 至于如何 ...
- android代码关闭数据库,android – 我应该如何正确打开和关闭我的数据库
我有一个应用程序,它将一些数据存储在SQLite数据库中.此外,我在我的应用程序中进行了大量查询和重新查询.我在其中有大约15个活动.并且所有人都使用数据库来查询数据. 但我正在做的是在每个活动中打开 ...
- android代码查找图像,Android平台上利用opencv进行图像的边沿检测
原标题:Android平台上利用opencv进行图像的边沿检测 近开始接触opencv for Android,从网上down了图像的边沿检测的代码. 测试图片: 在Android2.3.1模拟器上跑 ...
- Android代码混淆处理,android代码混淆解决方案
以下包含了常见的基本代码与一些三方框架的混淆方案. ##########################基本混淆参数###################### # 代码混淆压缩比,在0~7之间,默认 ...
最新文章
- AttributeError: ‘Tensor‘ object has no attribute ‘encoder‘
- 客户端调用 WCF 的几种方式
- PHP JSON文件解析并获取key、value,判断key是否存在
- leetcode刷题六z字形变换
- Redis Key过期及清除策略
- 关闭tensorflow运行时的警告信息1
- Azure Redis 缓存使用注意事项与排查问题文档整理
- SystemFile
- NullableTypes for .NET
- angular遇到问题
- hybird简介以及安卓应用hybird初体验
- matlab插值计算
- 服务器属于网络计算机,服务器它到底是什么,和电脑又有什么区别
- Redhat 7.2 安装网卡驱动
- PPT/Word中英文单词换行问题 (取消了西文在单词中间换行的选项,但英文部分依然不连续) 的解决方法
- js简繁转换,两种实现方式,妥妥的~
- 西门子smart200与台达MS300变频器通讯程序 触摸屏与plc以太网通讯,PLC与变频器通讯485口相连
- P60-前端基础HTML-表格样式
- python3 manage.py startapp catalog 执行成功但未生成 catalog文件夹 解决办法
- 周日我们能见证历史时刻吗?反正现在先预热!
热门文章
- 最大化参数 火车头_铁路大亨各火车头的性能参数
- 科比:向火箭脱帽致敬!
- 64位Win7,联想LenovoV470A2350W44G500P7CW7(BK-2G)-CN 频繁报告××已停止工作 原因
- 【一点自己的人生经历】记一次考博经历
- Qt 槽机制:public slots 和 private slots
- 风火轮编程Python第一阶段课程检测评估单
- 【JAVAScript】——onload,onbeforeunload,onunload区别
- Photoshop的基本使用和Cutterman插件的安装
- 超实用的网页页脚设计小技巧
- Hudi学习二:Hudi基本概念