IO流之压缩解压流

 

 解压的本质:

压缩:把每一个文件变成ZipEntry对象存储到本地

解压:把每一个ZipEntry按照层级拷贝到本地另一个文件夹中

解压流:

ZipInputStream()

获取到zip压缩包内的每一个ZipEntry对象,遍历所有entry对象。

如果是文件夹,创建同名文件夹。

如果是文件,通过解压缩流读取每个entry对象,同时使用字节流将数据写出,字节流会自动创建文件对象。

public class 解压缩流 {
    public static void main(String[] args) {

        //创建一个File表示要解压的压缩包
        File src=new File("/Users/XXX/IdeaProjects/basecode/day02/aaaa/a.txt");
        //创建一个File对象表示解压到目的地
        File dest=new File("/Users/XXX/IdeaProjects/basecode/day02/aaaa/");


    }

    //定义一个方法解压
    public static void unzip(File src,File dest) throws IOException {
        //解压的本质:把压缩包里的每一个文件或者文件夹读取出来,按照层级拷贝到目的地中

        //创建一个解压缩流来读取压缩包中的数据
        ZipInputStream zis=new ZipInputStream(new FileInputStream(src));

        //获取到压缩包里的每一个entry对象
        ZipEntry zipEntry;
        //getNextEntry方法可以获取到entry对象
        while ((zipEntry=zis.getNextEntry())!=null){
            if (zipEntry.isDirectory()){
                //如果是文件夹
                File file=new File(dest,zipEntry.getName());//父级路径+子路径
                file.mkdirs();
            }else {
                //如果是文件,需要将文件读取到对应层级的文件夹中
                FileOutputStream fos=new FileOutputStream(new File(dest+zipEntry.getName()));
                int b;
                while ((b=zis.read())!=-1){
                    fos.write(b);
                }
                fos.close();
                zis.closeEntry();
            }
         zis.close();
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值