关键词搜索

源码搜索 ×
×

(Java)压缩流

发布2020-02-11浏览1195次

详情内容

在日常的使用中经常会使用 WinRAR 或者 WinZIP 等压缩文件,通过这些软件可以把一个很大的文件进行压缩以方便传输,在Java 中为了减少传输时的数据量也提供了专门的压缩流,可以将文件夹压缩成 ZIP、JAR、GZIP 等文件形式。
在这里插入图片描述

一、ZIP 压缩输入/输出流简介

在 Java 中要实现ZIP的压缩需要导入 java.util.zip包。
在这里插入图片描述
在每一个压缩文件中都会存在多个子文件,那么每一个子文件在 Java 中就使用 ZipEntry表示,ZipEntry 类的常用方法:
在这里插入图片描述
压缩的输入/输出类定义在 java.util.zip 包中,压缩的输入/输出流也属于 InputStream 或 OutputStream 的子类,但是却没有定义在java.io 包中,而是以一种工具类的形式提供,在操作时还需要使用 java.io 包的支持

二、ZipOutputStream 类

如果要完成一个文件或文件夹的压缩,需要使用 ZipOutputStream 类。ZipOutputStream 是 OutputStream 的子类,常用方法:
在这里插入图片描述

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

public class Test{
    public static void main(String[] args) throws Exception{//抛出所有异常
        //定义要压缩的文件
        File file = new File("D:" + File.separator + "test.txt");
        //定义压缩文件名称
        File zipFile = new File("D:" + File.separator + "test.zip");
        InputStream input = new FileInputStream(file);//定义输入文件流
        ZipOutputStream zipOut = null;//定义压缩输出流
        //实例化压缩输出流对象,并指定压缩文件的输出路径
        zipOut = new ZipOutputStream(new FileOutputStream(zipFile));
        //每一个被压缩的文件都用 ZipEntry 表示,需要为每一个压缩后的文件设置名称
        zipOut.putNextEntry(new ZipEntry(file.getName()));//创建 ZipEntry
        zipOut.setComment("Java");//设置注释
        int temp =0;
        while ((temp = input.read())!=-1){//读取内容
            zipOut.write(temp);//压缩输出内容
        }
        input.close();//关闭输入流
        zipOut.close();//关闭压缩输出流
    }
}

    这里将 test.txt 作为源文件,然后使用 ZipOutputStream 将所有的压缩数据输出到 test.zip 文件中,在压缩时采用了边读边写的方式完成
    在这里插入图片描述
    这里通过使用 ZipOutputStream 读取 ZIP 格式的压缩文件,然后通过 getNextEntry() 方法依次读取出其中每一个 ZipEntry 对象的名称,并通过 ZipFile 类取得每一个 ZIPEntry 的输入流对象,在进行文件输出前,判断其输出文件夹以及文件是否存在,如果不存在则创建。

    相关技术文章

    点击QQ咨询
    开通会员
    返回顶部
    ×
    微信扫码支付
    微信扫码支付
    确定支付下载
    请使用微信描二维码支付
    ×

    提示信息

    ×

    选择支付方式

    • 微信支付
    • 支付宝付款
    确定支付下载