网上有很多介绍下载文件或者解压zip文件的文章,但是两者结合的不多,在此记录一下下载zip文件并直接解压的方法。

其实也很简单,就是把下载文件和解压zip文件结合到一起。下面即代码:

        URLConnection connection;
ZipInputStream zipIn = null;
FileOutputStream fileOut = null;
ZipEntry zipEntry = null;
int readedBytes = 0;
try {
connection = modelUrl.openConnection();
Log.v(TAG, "model file length:"+connection.getContentLength());
zipIn = new ZipInputStream(connection.getInputStream());
while ((zipEntry = zipIn.getNextEntry()) != null) {
String entryName = zipEntry.getName();
if (zipEntry.isDirectory()) {
entryName = entryName.substring(0, entryName.length() - 1);
File folder = new File(folderPath + File.separator+ entryName);
folder.mkdirs();
} else {
String fileName=folderPath + File.separator + entryName;
File file = new File(fileName);
file.createNewFile();
fileOut = new FileOutputStream(file);
while ((readedBytes = zipIn.read(downLoadBuffer)) > 0) {
fileOut.write(downLoadBuffer, 0, readedBytes);
total+=readedBytes;
}
fileOut.close();
}
zipIn.closeEntry();
}
zipIn.close();
}
catch (IOException e) {
e.printStackTrace();
}

更新

在此处其实有一个坑,如果downLoadBuffer这个缓冲区设置的太大,会导致下载的文件总是不完整或者抛出异常下载失败。我在网上搜了一下,没有找到原因。经过我的测试,原因应该是:下载和解压是两个步骤,一般来说解压的速度都高于下载,当下载的数据比解压需要的数据少太多时(即两者速度不匹配),就会出现下载文件失败的情况。因此,需要把downLoadBuffer设置的小一点,控制解压速度,即每次只解压一小部分的数据,这样两者的速度才能比较匹配。我的代码中设置成了1024*8,共8kb。保守的做法是设置成1024,即1kb,一般都不会出问题。

Android 下载zip压缩文件并解压的更多相关文章

  1. PHP zip压缩文件及解压

    PHP zip压缩文件及解压 利用ZipArchive 类实现 只有有函数.界面大家自己写 ZipArchive(PHP 5.3 + 已自带不需要安装dll) /** * 文件解压 * @param ...

  2. Java实现zip压缩文件的解压

    需求描述: 前段时间写了一篇博客<Java实现对文本文件MD5加密并ftp传送到远程主机目录>,实现了一部分的业务需求.然而有些业务可能不止传送一个文件,有时候客户需要传多个文件,原有系统 ...

  3. SpringMVC上传压缩文件,解压文件,并检测上传文件中是否有index.html

    SpringMVC上传压缩文件,解压文件,并检测上传文件中是否有index.html 说明: 1.环境:SpringMVC+Spring+Tomcat7+JDK1.7 2.支持 zip和rar格式的压 ...

  4. pclzip 压缩文件与解压

    类PclZip.class.php下载:PclZip.rar<?php header("Content-type: text/html; charset=utf-8"); f ...

  5. Unity3D研究院之LZMA压缩文件与解压文件

    原地址:http://www.xuanyusong.com/archives/3095 前两天有朋友告诉我Unity的Assetbundle是LZMA压缩的,刚好今天有时间那么就研究研究LZMA.它是 ...

  6. Android下载压缩文件与解压案例

    ackage com.example.jsontest.biz; import java.io.BufferedInputStream; import java.io.BufferedOutputSt ...

  7. 【VC++技术杂谈008】使用zlib解压zip压缩文件

    最近因为项目的需要,要对zip压缩文件进行批量解压.在网上查阅了相关的资料后,最终使用zlib开源库实现了该功能.本文将对zlib开源库进行简单介绍,并给出一个使用zlib开源库对zip压缩文件进行解 ...

  8. Android之zip文件加密解压及进度条的实现

    zip文件的解压能够使用java的zip库,可是没有实现对加密文件的解压功能,这里能够使用zip4j来实现.详细能够參看该文<Android下zip压缩文件加密解密的完美解决方式>.该文件 ...

  9. Linux下*.tar.bz2等文件如何解压--转

    如果tar不支持j这个参数就先用 bzip2 -d xxx.tar.bz2 把它解压成.tar文件,然后再用 tar xvf xxx.tar 拆包.压缩解压 linux下怎么解后缀名是gzip的文件? ...

随机推荐

  1. nginx中配置proxy_pass

    在nginx中配置proxy_pass时,当在后面的url加上了/,相当于是绝对根路径,则nginx不会把location中匹配的路径部分代理走;如果没有/,则会把匹配的路径部分也给代理走. 下面四种 ...

  2. 问题-DelphiXE10.1 FireDAC联接oracle数据库方法

    问题现象:安装oracle后,安装Delphi10.1,放FDConnection1时,选择"Ora"驱动时,提示如下: [FireDAC][Phys][Ora]-315. Can ...

  3. WCF终结点——终结点地址(EndpointAddress)

    终结点的地址的Uri属性作为终结点地址的唯一标示. 包括客户端终结点和服务端终结点. 一.服务端终结点: 服务端的终结点通过宿主的添加方法暴露出来,从而成为可以调用的资源. 下面是将服务绑定到宿主的代 ...

  4. Mongodb 的常用方法,在可视化工具执行

    查询: db.getCollection('message').find({"userId":"31257"}) 查询总数: db.getCollection( ...

  5. [转]Oracle存储过程总结

    原文地址:https://www.cnblogs.com/tingbogiu/p/5641000.html 1.存储过程结构 1.1 第一个存储过程 create or replace procedu ...

  6. Linux watchdog 关闭退出功能

    Linux 程序退出的时候,程序是会把 watchdog 调用 release 功能.

  7. BMP位图文件格式详解及编程建议

    BMP文件渊源流长,虽然对JPG.PNG等格式图像文件来说,确实有点土,但是毕竟BMP文件格式相对简单,容易理解,至于BMP众多的位图格式也不能责怪微软,主要是早期谁也没料到图片技术会发展的这么快,而 ...

  8. connect设置超时的方法

    在使用TCP的connect连接服务器时,在默认情况下系统使用的是阻塞式socket,如果服务器当前不可用,则connect会等待知道超时时间到达,而这个超时时间是系统内核规定的,并不能使用setSo ...

  9. PHP——安装wampserver丢失MSVCR110.dll

    win8系统 64位,在安装wampserver时显示计算机丢失MSVCR110.dll   1.首先是打开浏览器,在浏览器的地址栏里输入 http://www.microsoft.com/zh-CN ...

  10. win10里如何在中文输入法里添加美国键盘

    在控制面板打开“时钟.语言和区域”设置界面,选中“语言”设置   “语言”设置里点击“添加语言”   在添加语言设置里选择“英语”,并点击“打开”按钮,在“区域变量”设置页面里选择“英语(美国)” , ...