Android zip 解压

Android zip 解压

本文主要记录下android中对zip文件的解压操作.
解压文件主要用到ZipInputStream和ZipEntry 。

1:ZipInputStream

ZipInputStream是Java中的一个类,用于从ZIP文件中读取压缩数据。
它是InputStream的子类,可以用于逐个读取ZIP文件中的条目(entry)。

使用ZipInputStream的一般步骤如下:

  1. 创建一个ZipInputStream对象,将要读取的ZIP文件作为输入流传入构造函数。
  2. 使用getNextEntry()方法获取ZIP文件中的下一个条目。该方法返回一个ZipEntry对象,表示当前条目的信息。
  3. 使用read()方法从ZipInputStream中读取当前条目的数据。可以将读取到的数据写入到文件或进行其他处理。
  4. 重复步骤2和步骤3,直到所有条目都被读取完毕。
  5. 关闭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);
            }
        }
    }

}
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值