您的位置:首页 > 移动开发 > Android开发

android解压sd卡中的压缩文件

2017-11-09 15:38 155 查看
    我是用的ZipFile这个类,这里需要说明一下,这个类有两个一个是在org.apache.tool.zip包里,另外一个在java.util.zip包下,这个两个的区别在于后者的解压效率快于前者,但是前者可以解决被解压文件中含有中文字符乱码问题,他们的使用方法基本一致,所以就要看你需要解压的文件里是否包含中文了。

我这里就先用Apache包下的ZipFile来实现了,使用方法:

1.添加读写sd卡的权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

2.创建ZipFile对象,并指定编码格式,避免中文乱码
ZipFile zipFile = new ZipFile(zipFileName,"GBK");

3.获取文件实体集合,也就是获取压缩文件中所有文件的集合
Enumeration e = zipFile.getEntries();//文件实体集合

4.遍历文件实体集合,创建相应的文件夹或者文件,并向文件中写入内容
while(e.hasMoreElements()) {//遍历文件实体集合

entry= (ZipEntry) e.nextElement();//获取文件实体

InputStream is= zipFile.getInputStream(entry);//获取文件的读操作流

File dstFile = new File(entry.getName());//在sd卡的对应目录下创建文件

if (!dstFile.exists()) {//判断文件是否存在

if (entry.isDirectory()) {//目录类型
dstFile.mkdirs();//创建目录
} else {//文件类型
dstFile.createNewFile();//创建文件
}
}

if (dstFile.isFile()) {//只有文件类型才继续写操作
OutputStream fos = new FileOutputStream(dstFile);

byte[] buffer = new byte[8192];

while ((count = is.read(buffer, 0, buffer.length)) != -1) {

fos.write(buffer, 0, count);

}

if (fos != null) {//别忘了在这里关闭流,否则后面会创建很多io流,造成文件打开太多异常
fos.close();
}
}

if (is != null) {//别忘了在这里关闭流,否则后面会创建很多io流,造成文件打开太多异常
is.close();
}
}

5.最后关闭zipFile对象,避免内存泄露
if (zipFile != null) {
zipFile.close();
}

最后附上包含Apache里ZipFile相关文件的jar包下载链接:点击打开链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: