android系统解压zip文件,Android解压缩zip文件
期望:使项目apk包中的大文件批量数据可以单独作为一个apk来管理,所以需要将Android assets文件夹下的zip打包文件解压到SDCard上。
解压缩的操作由于比较耗时,所以新开一个线程执行以下函数
/**将assets对应文件解压到对应的sdcard目录中*/
public void unPress2Sdcard(String fileName){
try {
/**目标路径*/
String destDir = rootPath + File.separator + fileName;
/**将压缩文件拷贝到内存卡中*/
mAssetCopyer.copyBigDataToSD(destDir, fileName);
/**解压文件到目标路径*/
unzip(destDir, offlinePath);
/**删除在内存卡上临时存在的压缩文件*/
FileUtils.deleteFile(destDir);
} catch (Exception e) {
e.printStackTrace();
}
}
对应的先将assets下的zip文件拷贝到SDCard中,这个是直接在网上找的方法拿来用
public void copyBigDataToSD(String strOutFileName,String file) throws IOException{
InputStream myInput;
OutputStream myOutput = new FileOutputStream(strOutFileName);
myInput = mContext.getAssets().open(file);
byte[] buffer = new byte[1024];
int length = myInput.read(buffer);
while(length > 0){
myOutput.write(buffer, 0, length);
length = myInput.read(buffer);
}
myOutput.flush();
myInput.close();
myOutput.close();
}
然后解压缩操作
@SuppressWarnings("unchecked")
public static void unzip(String zipFilePath, String unzipFilePath) throws Exception{
/**验证是否为空*/
if (isEmpty(zipFilePath) || isEmpty(unzipFilePath)){
}
File zipFile = new File(zipFilePath);
/**创建解压缩文件保存的路径*/
File unzipFileDir = new File(unzipFilePath);
if (!unzipFileDir.exists()){
unzipFileDir.mkdirs();
}
//开始解压
ZipEntry entry = null;
String entryFilePath = null;
int count = 0, bufferSize = 1024;
byte[] buffer = new byte[buffe 大专栏 Android解压缩zip文件rSize];
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
ZipFile zip = new ZipFile(zipFile);
Enumeration entries = (Enumeration)zip.entries();
//循环对压缩包里的每一个文件进行解压
while(entries.hasMoreElements()){
entry = entries.nextElement();
log("log ing5:"+entry.getName());
/**这里提示如果当前元素是文件夹时,在目录中创建对应文件夹
* ,如果是文件,得出路径交给下一步处理*/
entryFilePath = unzipFilePath + File.separator + entry.getName();
File file = new File(entryFilePath);
log("~~是否是文件夹:"+file.isDirectory());
if(entryFilePath.endsWith("/")){
if(!file.exists()){
file.mkdir();
}
continue;
}
/***这里即是上一步所说的下一步,负责文件的写入,不服来咬(≖ ‿ ≖)✧*/
bos = new BufferedOutputStream(new FileOutputStream(entryFilePath+"/"));
bis = new BufferedInputStream(zip.getInputStream(entry));
while ((count = bis.read(buffer, 0, bufferSize)) != -1){
bos.write(buffer, 0, count);
}
bos.flush();
bos.close();
}
}
用的也是直接网上down下来的,但是在解压缩操作中遇到的是这一句bos = new BufferedOutputStream(new FileOutputStream(entryFilePath));传入的entryFilePath运行的时候却老提示不是文件夹,于是把中间循环解压元素的代码以及一些冗余的逻辑删除了,改成了现在这样,进入循环先判断是否是文件夹(我这里是靠尾部的字符判断的),如果是,在目标路径中创建,开始下一循环,不是,就把文件解压到对应路径。
最后一步删除SDcard下的压缩文件
FileUtils.deleteFile(destDir);
注意:源压缩包必须是zip格式的并且是快速压缩,超高压缩算法不同,解析不了,我是在window上用快压打包的。
标签:String,zip,buffer,解压缩,entryFilePath,File,new,Android
来源: https://www.cnblogs.com/sanxiandoupi/p/11713205.html
android系统解压zip文件,Android解压缩zip文件相关推荐
- oracle两个压缩包怎么解压,AIX下如何解压缩zip文件
1.首先检查是否安装如下包,若没有安装的话需要从安装介质中安装 lslpp -l |grep -i rpm.rte lslpp -l |grep -i rpm.rte就可以像linux那样使用rpm命 ...
- android zip格式应用,Android 压缩解压zip文件
Android 压缩解压zip文件 上次写了个解压缩功能,但有局限性,比如压缩文件xx.zip 里包括子目录的情况下,执行上次解压缩的功能就不能实现我们想要的效果,于是在网上参考了一下java的解压缩 ...
- 安卓zip解压软件_[Android]压缩解压工具ZArchiver Pro高级直装版
[简介]:ZArchiver Pro是一款安卓平台的压缩解压工具,能够在手机端解压常见的rar,zip,7z等压缩文件,本版为Pro高级直装版本,解锁高级功能,支持压缩包注释查看.支持中文文件名,(这 ...
- android assets解压,Android assets内压缩文件解压,解压到缓存示例
1.assets内压缩文件解压AssetsZipUtils,包含一个获取文件夹下所有文件路径的方法,方便获取文件使用 public class AssetsZipUtils { public stat ...
- Android系统中APP安装到手机后的文件分析
一. Android系统APP安装格式 1.1 CAB格式 直接将文件copy到手机里,都可以在手机上执行该CAB文件即可安装. 1.2 EXE格式 EXE格式的程序可分为手机上直接运行(即绿色软件的 ...
- android 版本更新原理,Android系统Recovery工作原理之使用update.zip升级过程分析(二)...
Android系统Recovery工作原理之使用update.zip升级过程分析(二)---update.zip差分包问题的解决 在上一篇末尾提到的生成差分包时出现的问题,现已解决,由于最近比较忙,相 ...
- Android系统Recovery工作原理之使用update.zip升级过程分析(五)
Android系统Recovery工作原理之使用update.zip升级过程分析(五)---update.zip包从上层进入Recovery服务文章开头我们就提到update.zip包来源有两种,一个 ...
- Android系统Recovery工作原理之使用update.zip升级过程分析(二)---u...
2019独角兽企业重金招聘Python工程师标准>>> Android系统Recovery工作原理之使用update.zip升级过程分析(二)---update.zip差分包问题的 ...
- android系统文件误删,Android系统建个回收站帮你找回误删文件
手机天堂最新Android手机教程:Android系统可以帮你找回误删的资源文件.要怎么弄才可以找回被你删除掉的文件呢?下面一起跟手机天堂小编看看: 手机里失手误删的经历谁都有过,又或者某时刻的冲动- ...
- android 回收站设计,【教程】Android系统建个回收站帮你找回误删文件
亚风下载最新Android手机教程:Android系统可以帮你找回误删的资源文件.要怎么弄才可以找回被你删除掉的文件呢?下面一起跟亚风下载小编看看: 手机里失手误删的经历谁都有过,又或者某时刻的冲动- ...
最新文章
- 【Boost】boost库中thread多线程详解10——condition条件变量
- winfrom 图片互传
- matlab pca和逆pca函数,matlab_PCA,训练集与测试集分开,原理和用法
- 研讨会 | 知识图谱大咖云集阿里,他们都说了啥
- css3文字一行或多行展示,多余文字省略号(学习)超出隐藏
- webug第十二关:我系统密码忘记了!
- 2n皇后的问题java_蓝桥杯java 基础练习 2n皇后问题
- Google IPU:互联网巨头纷纷进军芯片行业是为何?
- MFC中编辑框edit的用法
- mysql id 不连续_MySQL中自增主键不连续之解决方案。(20131109)
- linux代码运行流程,Linux中程序执行的流程分析工具——strace
- mysql数据库季度函数_数据库之MySQL函数(二)
- 操作系统进程调度算法(c语言实现)
- matlab 课程设计心得与总结,(最新整理)课程设计心得体会
- PNG的介绍以及PNG文件解析
- 公众号里面套页面_怎么套用别人的公众号模板,如何套用微信图文模板
- 移动应用,让人激动的这些年
- usb_host_dll
- 基于Spring+SpringMVC+MyBatis博客系统的开发教程(十六)
- 密码库LibTomCrypt学习记录——(1.5)分组密码算法——示例代码AES-ECB