Android -- 压缩与解压文件
我在做一个项目中,工程文件中有一个功能需要很多图片,图片与app一起打包下来的话有30+M,那么我们就考虑另外下载压缩包,我们将图片取出,工程就只有4+M了,哈哈哈哈,呵呵,真恐怖。那么这样就涉及到另外下载压缩包,以及压缩包的解压。
java的工具类里面也包含的有对zip的处理。
代码实现
public class Util {
public static final String ZIP_FILENAME = "/data/data/com.yydcdut.unzip/new_ios_7_icons_by_sunkotora-d68qbmo.zip";//需要解压缩的文件名
public static final String ZIP_DIR = "/data/data/com.yydcdut.unzip/";//需要压缩的文件夹
public static final String UN_ZIP_DIR = "/data/data/com.yydcdut.unzip/zzip/";//要解压的文件目录
//上面两个变量好像说反了。
public static final int BUFFER = 1024 ;//缓存大小
/**
* zip压缩功能.
* 压缩baseDir(文件夹目录)下所有文件,包括子目录
* @throws Exception
*/
public static void zipFile(String baseDir,String fileName) throws Exception{
List fileList=getSubFiles(new File(baseDir));
ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(fileName));
ZipEntry ze=null;
byte[] buf=new byte[BUFFER];
int readLen=0;
for(int i = 0; i <fileList.size(); i++) {
File f=(File)fileList.get(i);
ze=new ZipEntry(getAbsFileName(baseDir, f));
ze.setSize(f.length());
ze.setTime(f.lastModified());
zos.putNextEntry(ze);
InputStream is=new BufferedInputStream(new FileInputStream(f));
while ((readLen=is.read(buf, 0, BUFFER))!=-1) {
zos.write(buf, 0, readLen);
}
is.close();
}
zos.close();
}
/**
* 给定根目录,返回另一个文件名的相对路径,用于zip文件中的路径.
* @param baseDir java.lang.String 根目录
* @param realFileName java.io.File 实际的文件名
* @return 相对文件名
*/
private static String getAbsFileName(String baseDir, File realFileName){
File real=realFileName;
File base=new File(baseDir);
String ret=real.getName();
while (true) {
real=real.getParentFile();
if(real==null)
break;
if(real.equals(base))
break;
else
ret=real.getName()+"/"+ret;
}
return ret;
}
/**
* 取得指定目录下的所有文件列表,包括子目录.
* @param baseDir File 指定的目录
* @return 包含java.io.File的List
*/
private static List getSubFiles(File baseDir){
List ret=new ArrayList();
File[] tmp=baseDir.listFiles();
for (int i = 0; i <tmp.length; i++) {
if(tmp[i].isFile())
ret.add(tmp[i]);
if(tmp[i].isDirectory())
ret.addAll(getSubFiles(tmp[i]));
}
return ret;
}
/**
* 解压缩功能.
* 将ZIP_FILENAME文件解压到ZIP_DIR目录下.
* @throws Exception
*/
public static void upZipFile() throws Exception{
ZipFile zfile=new ZipFile(ZIP_FILENAME);
Enumeration zList=zfile.entries();
ZipEntry ze=null;
byte[] buf=new byte[1024];
while(zList.hasMoreElements()){
ze=(ZipEntry)zList.nextElement();
if(ze.isDirectory()){
File f=new File(ZIP_DIR+ze.getName());
f.mkdir();
continue;
}
OutputStream os=new BufferedOutputStream(new FileOutputStream(getRealFileName(ZIP_DIR, ze.getName())));
InputStream is=new BufferedInputStream(zfile.getInputStream(ze));
int readLen=0;
while ((readLen=is.read(buf, 0, 1024))!=-1) {
os.write(buf, 0, readLen);
}
is.close();
os.close();
}
zfile.close();
}
/**
* 给定根目录,返回一个相对路径所对应的实际文件名.
* @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);
if(dirs.length>1){
for (int i = 0; i < dirs.length-1;i++) {
ret=new File(ret, dirs[i]);
}
if(!ret.exists())
ret.mkdirs();
ret=new File(ret, dirs[dirs.length-1]);
return ret;
}
return ret;
}
}
代码分析
先说解压,用ZipFile实例化压缩文件,接下来对ZipFile进行处理。列举出ZipFile中的元素,在用IO操作将ZipFile中的元素转化成文件,如果是目录,则创建目录继续操作。
压缩,运用ZipOutputStream将文件转成IO输出流,再BufferedInputStream输入流写入进去。
我是天王盖地虎的分割线
源代码:http://pan.baidu.com/s/1dD1Qx01
unzip.zip
转载请注明出处:http://www.cnblogs.com/yydcdut
Android -- 压缩与解压文件的更多相关文章
- AIX系统上压缩与解压文件
压缩. 命令格式: #tar -cvf (或xvf)+文件名+设备 C:是本地到其他设备 x:是其他设备到本地 r:是追加,比如打包时,将其他文件追加进来使用该参数. t:显示tar包里的内容,但还原 ...
- Linux学习笔记之AIX系统上压缩与解压文件
0x00 概述 AIX机器真难用,一时半会还真适应不了. 0x01 压缩tar 命令格式: # tar -cvf (或xvf)+文件名+设备 C:是本地到其他设备 x:是其他设备到本地 r:是追加 ...
- C# 压缩、解压文件夹或文件(带密码)
今天梳理一下项目中用到的压缩.解压文件夹或文件的方法,发现因为需求不同,已经用了好几个不同组件.今天就好好整理记录下,别下次遇到需求又重头开始了. DotNetZip DotNetZip是一个开源的免 ...
- Linux命令(16)压缩,解压文件
tar: 简介:tar命令只是把目录打包成一个归档(文件),并不负责压缩.在tar命令中可以带参数调用gzip或bzip2压缩.因为gzip和bzip2只能压缩单个文件. 在linux下是不需要后缀名 ...
- C#工具类:使用SharpZipLib进行压缩、解压文件
SharpZipLib是一个开源的C#压缩解压库,应用非常广泛.就像用ADO.NET操作数据库要打开连接.执行命令.关闭连接等多个步骤一样,用SharpZipLib进行压缩和解压也需要多个步骤.Sha ...
- 本地上传文件至服务器的技巧(linux文件压缩及解压文件)
linux(ubuntu)文件解压及压缩文件 ubuntu支持文件的解压及压缩功能, 如果ubuntu上面没有安装过unzip工具的话,可以通过下面命令安装: sudo apt-get install ...
- 使用SharpZipLib压缩与解压文件
using ICSharpCode.SharpZipLib.Zip; using System; using System.Collections.Generic; using System.IO; ...
- (转)使用 linux tar 命令压缩与解压文件
原文链接 http://www.cnblogs.com/qq78292959/archive/2011/07/06/2099427.html tar -c: 建立压缩档案-x:解压-t:查看内容-r: ...
- 【转】iOS开发之压缩与解压文件
ziparchive是基于开源代码”MiniZip”的zip压缩与解压的Objective-C 的Class,使用起来非常的简单方法:从http://code.google.com/p/ziparch ...
随机推荐
- ref:Java安全之反序列化漏洞分析(简单-朴实)
ref:https://mp.weixin.qq.com/s?__biz=MzIzMzgxOTQ5NA==&mid=2247484200&idx=1&sn=8f3201f44e ...
- Python之路【第六篇】:模块与包
目录 一 模块 3.1 import 3.2 from ... import... 3.3 把模块当做脚本执行 3.4 模块搜索路径 3.5 编译python文件 3.6 标准模块 3.7 dir ...
- 【JAVAWEB学习笔记】22_ajax:异步校验用户名和站内查询
Js原生Ajax和Jquery的Ajax 学习目标 案例1-异步校验用户名是否存在 案例2-站内查询 一.Ajax概述 1.什么是同步,什么是异步 同步现象:客户端发送请求到服务器端,当服务器返回响应 ...
- 【BZOJ 2460】线性基
2460: [BeiJing2011]元素 Description 相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔法矿石炼制法杖的技术.那时人们就认识到,一个法杖的法力 ...
- 【BZOJ 1969】 1969: [Ahoi2005]LANE 航线规划 (树链剖分+线段树)
1969: [Ahoi2005]LANE 航线规划 Description 对Samuel星球的探险已经取得了非常巨大的成就,于是科学家们将目光投向了Samuel星球所在的星系——一个巨大的由千百万星 ...
- CodeForces - 1016D Vasya And The Matrix
题面在这里! 很明显二进制每一位都是无关的,所以可以先把原问题简化:给矩阵中的每个位置填入0/1,使得特定行/列有奇数个1,其他行/列有偶数个1. 一个比较好想的方法是对行和列 列出 n+m 个异或方 ...
- python实现图片验证码
1 验证基础知识1.1 Python生成随机验证码,需要使用PIL模块. # 安装 pip3 install pillow 1.2 创建图片 from PIL import Image img = I ...
- 【9.7校内测试】【二分+spfa】【最长上升子序列】【状压DP+贪心(?)】
刘汝佳蓝书上的题,标程做法是从终点倒着$spfa$,我是二分答案正着$spfa$判断可不可行.效果是一样的. [注意]多组数据建边一定要清零啊QAQ!!! #include<iostream&g ...
- Oracle密码忘记了解决办法
Oracle密码忘记了怎么办?有时候我们可能忘记了一个用户的密码,但是又需要以这个用户做一些操作,又不能去修改掉这个用户的密码,这个时候,就可以利用一些小窍门,来完成操作.采用如下方法可以修改密码: ...
- 移动应用安全开发指南(Android)--数据验证
概述 移动应用往往通过数据的发送.接收和处理来完成一系列功能,通常情况下,处理的数据绝大部分都来源于外部(比如网络.内部或外部存储和用户输入等),对这些数据处理不当会导致各种各样的漏洞和风险,比代码执 ...