Android zip 解压
本文主要记录下android中对zip文件的解压操作.
解压文件主要用到ZipInputStream和ZipEntry 。
1:ZipInputStream
ZipInputStream是Java中的一个类,用于从ZIP文件中读取压缩数据。
它是InputStream的子类,可以用于逐个读取ZIP文件中的条目(entry)。
使用ZipInputStream的一般步骤如下:
- 创建一个ZipInputStream对象,将要读取的ZIP文件作为输入流传入构造函数。
- 使用getNextEntry()方法获取ZIP文件中的下一个条目。该方法返回一个ZipEntry对象,表示当前条目的信息。
- 使用read()方法从ZipInputStream中读取当前条目的数据。可以将读取到的数据写入到文件或进行其他处理。
- 重复步骤2和步骤3,直到所有条目都被读取完毕。
- 关闭ZipInputStream。
2:ZipEntry
ZipEntry类是Java中用于表示ZIP文件中的条目的类。它提供了一些常用方法来获取和设置ZIP条目的属性。以下是ZipEntry类的一些常用方法:
getName():获取ZIP条目的名称。
getSize():获取ZIP条目的未压缩大小。
getCompressedSize():获取ZIP条目的压缩大小。
getTime():获取ZIP条目的最后修改时间。
isDirectory():判断ZIP条目是否为目录。
getComment():获取ZIP条目的注释。
getMethod():获取ZIP条目的压缩方法。
setCrc():设置ZIP条目的CRC校验和。
setSize():设置ZIP条目的未压缩大小。
setCompressedSize():设置ZIP条目的压缩大小。
setTime():设置ZIP条目的最后修改时间。
setComment():设置ZIP条目的注释。
3:解压代码
详细的代码如下:
public class ZipUtils {
/**
* 解压文件
*
* @throws
*/
public static void unZip(String zipFilePath, File targetDir) throws IOException {
File destDir = new File(targetDir);
if (!destDir.exists()) {
destDir.mkdir();
}
File file = new File(zipFilePath);
FileInputStream fis = new FileInputStream(file);
ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));
String targetBasePath = targetDir.getAbsolutePath();
unzip(zis, targetBasePath);
}
private static void unzip(ZipInputStream zis, String targetPath) throws IOException {
ZipEntry entry = zis.getNextEntry();
if (entry != null) {
String entryName = entry.getName();
File file = new File(targetPath + File.separator + entry.getName());
if (entry.isDirectory()) {
// 可能存在空文件夹
if (!file.exists()) {
file.mkdirs();
}
unzip(zis, targetPath);
} else {
File parentFile = file.getParentFile();
if (parentFile != null && !parentFile.exists()) {
parentFile.mkdirs();
}
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file);// 输出流创建文件时必须保证父路径存在
int len = 0;
byte[] buf = new byte[1024];
while ((len = zis.read(buf)) != -1) {
fos.write(buf, 0, len);
}
fos.flush();
}catch (Exception ex)
{}
finally {
if(fos != null)
{
fos.close();
}
}
zis.closeEntry();
unzip(zis, targetPath);
}
}
}
}