java 实现 文件Zip解压缩

ZIP文件条目

Class ZipEntry

java.lang.Object
java.util.zip.ZipEntry

ZipEntry类 产生的对象,用来代表代表ZIP压缩文件的进入点

构造方法

ZipEntry(String name)

ZipEntry(ZipEntry e)

name:条目名称
e:zip条目对象

由于方法过多自行查JDK文档 ,后续有代码例子有说明

压缩流(压缩文件)

Class ZipOutputStream

java.lang.Object
java.io.OutputStream
java.io.FilterOutputStream
java.util.zip.DeflaterOutputStream
java.util.zip.ZipOutputStream

大致流程

  1. 创建被压缩的对象 和 压缩包的对象
  2. 创建 字节输出流 和 压缩输出流
  3. 为文件创建ZipEntry条目
  4. 将读取的数据通过输出流写入到硬盘中
  5. 完成压缩

构造方法

ZipOutputStream(OutputStream out) 

out:输出流

方法

修饰符 方法 说明
void close() 关闭流
void closeEntry() 关闭当前的ZIP条目,并定位流以写入下一个条目
void finish() 完成编写ZIP输出流的内容,而不关闭底层流
void putNextEntry(ZipEntry e) 开始编写新的ZIP文件条目,并将流定位到条目数据的开头
void setComment(String comment) 设置ZIP文件注释
void write(byte[] b, int off, int len) 将字节数组写入当前的ZIP条目数据

例子1 (老师讲解的例题)

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class Demo {
   
    
    static void compress(){
   
        //创建被压缩的对象
        File source = new File("E:\\png\\");
        //创建压缩包的对象
        File target = new File("E:\\mr.zip");
        
        //try括号内的资源会在try语句结束后自动释放,前提是这些可关闭的资源必须实现
        //创建字节输出流、压缩输出流
        try(FileOutputStream fis = new FileOutputStream(target);
            ZipOutputStream zos = new ZipOutputStream(fis)){
   
            
            //判断是否是文件夹
            if(source.isDirectory()){
   
                //遍历文件夹的文件
                for(File f : source.listFiles()){
   
                    addEntry(zos , "" , f);
                }
            }else{
   
                addEntry(zos,"",source);
            }
            
        }catch (Exception e){
   
            e.printStackTrace();
        }
        
    }
    
    /*
    *
    *   该方法用来写入文件数据 和 重新遍历文件夹
    * 方法参数:
    *   zos:压缩流
    *   base: 文件在压缩包中的路径
    *   source:被压缩的文件
    *
    *  */
    static void addEntry(ZipOutputStream zos , String base , File source){
   
        //判断是否是文件夹
        if (source.isDirectory()){
   //判断为文件夹
            
            //遍历文件夹的文件
            for (File file : source.listFiles()){
   
                /*
                *   参数2:
                *       base:文件路径
                *       source.getName():文件夹名称
                *       File.separator:分隔符( \\ 和 / )
                *
                * */
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值