期望:使项目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文件相关推荐

  1. oracle两个压缩包怎么解压,AIX下如何解压缩zip文件

    1.首先检查是否安装如下包,若没有安装的话需要从安装介质中安装 lslpp -l |grep -i rpm.rte lslpp -l |grep -i rpm.rte就可以像linux那样使用rpm命 ...

  2. android zip格式应用,Android 压缩解压zip文件

    Android 压缩解压zip文件 上次写了个解压缩功能,但有局限性,比如压缩文件xx.zip 里包括子目录的情况下,执行上次解压缩的功能就不能实现我们想要的效果,于是在网上参考了一下java的解压缩 ...

  3. 安卓zip解压软件_[Android]压缩解压工具ZArchiver Pro高级直装版

    [简介]:ZArchiver Pro是一款安卓平台的压缩解压工具,能够在手机端解压常见的rar,zip,7z等压缩文件,本版为Pro高级直装版本,解锁高级功能,支持压缩包注释查看.支持中文文件名,(这 ...

  4. android assets解压,Android assets内压缩文件解压,解压到缓存示例

    1.assets内压缩文件解压AssetsZipUtils,包含一个获取文件夹下所有文件路径的方法,方便获取文件使用 public class AssetsZipUtils { public stat ...

  5. Android系统中APP安装到手机后的文件分析

    一. Android系统APP安装格式 1.1 CAB格式 直接将文件copy到手机里,都可以在手机上执行该CAB文件即可安装. 1.2 EXE格式 EXE格式的程序可分为手机上直接运行(即绿色软件的 ...

  6. android 版本更新原理,Android系统Recovery工作原理之使用update.zip升级过程分析(二)...

    Android系统Recovery工作原理之使用update.zip升级过程分析(二)---update.zip差分包问题的解决 在上一篇末尾提到的生成差分包时出现的问题,现已解决,由于最近比较忙,相 ...

  7. Android系统Recovery工作原理之使用update.zip升级过程分析(五)

    Android系统Recovery工作原理之使用update.zip升级过程分析(五)---update.zip包从上层进入Recovery服务文章开头我们就提到update.zip包来源有两种,一个 ...

  8. Android系统Recovery工作原理之使用update.zip升级过程分析(二)---u...

    2019独角兽企业重金招聘Python工程师标准>>>  Android系统Recovery工作原理之使用update.zip升级过程分析(二)---update.zip差分包问题的 ...

  9. android系统文件误删,Android系统建个回收站帮你找回误删文件

    手机天堂最新Android手机教程:Android系统可以帮你找回误删的资源文件.要怎么弄才可以找回被你删除掉的文件呢?下面一起跟手机天堂小编看看: 手机里失手误删的经历谁都有过,又或者某时刻的冲动- ...

  10. android 回收站设计,【教程】Android系统建个回收站帮你找回误删文件

    亚风下载最新Android手机教程:Android系统可以帮你找回误删的资源文件.要怎么弄才可以找回被你删除掉的文件呢?下面一起跟亚风下载小编看看: 手机里失手误删的经历谁都有过,又或者某时刻的冲动- ...

最新文章

  1. 【Boost】boost库中thread多线程详解10——condition条件变量
  2. winfrom 图片互传
  3. matlab pca和逆pca函数,matlab_PCA,训练集与测试集分开,原理和用法
  4. 研讨会 | 知识图谱大咖云集阿里,他们都说了啥
  5. css3文字一行或多行展示,多余文字省略号(学习)超出隐藏
  6. webug第十二关:我系统密码忘记了!
  7. 2n皇后的问题java_蓝桥杯java 基础练习 2n皇后问题
  8. Google IPU:互联网巨头纷纷进军芯片行业是为何?
  9. MFC中编辑框edit的用法
  10. mysql id 不连续_MySQL中自增主键不连续之解决方案。(20131109)
  11. linux代码运行流程,Linux中程序执行的流程分析工具——strace
  12. mysql数据库季度函数_数据库之MySQL函数(二)
  13. 操作系统进程调度算法(c语言实现)
  14. matlab 课程设计心得与总结,(最新整理)课程设计心得体会
  15. PNG的介绍以及PNG文件解析
  16. 公众号里面套页面_怎么套用别人的公众号模板,如何套用微信图文模板
  17. 移动应用,让人激动的这些年
  18. usb_host_dll
  19. 基于Spring+SpringMVC+MyBatis博客系统的开发教程(十六)
  20. 密码库LibTomCrypt学习记录——(1.5)分组密码算法——示例代码AES-ECB

热门文章

  1. c语言自学教材百度网盘,110G超强C语言和C++编程0基础从入门到精通自学教程 百度云盘资源...
  2. DOM DEM DLG DRG之间的区别
  3. java io流类图
  4. 线性规划——单纯形法
  5. HBase二级索引实践(带你感受二级索引的力量)
  6. WP插件采集伪原创发布WordPress中英通用
  7. 利用Fiddler作为网络代理
  8. 实验设计与分析 (总结8)
  9. 从小白到架构师原来是这样修炼出来的
  10. fw325r虚拟服务器,fw325r无线路由器设置