0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

java中的压缩文件是如何解压与压缩的

科技绿洲 来源:Java技术指北 作者:Java技术指北 2023-10-10 15:49 次阅读

java 项目总是有上传 zip 包和下载 zip 包的需求,这时就得用 ZipInputStream 和 ZipOutputStream 类。

基础概念

  1. ZipOutputStream:是一种 FilterInputStream 、装饰器模式中的实现类,它可以直接读取zip 包的内容
    1. ZipOutputStream (OutputStream out):zip 输出流
    2. ZipEntry(String name):表示压缩文件中的一个文件或者目录
    3. void putNextEntry(ZipEntry e):写入新的压缩文件或者目录
  2. ZipIutputStream:是一种 FilterOutputStream, 可以实现 zip 文件的解压
    1. ZipIutputStream (IutputStream out):zip 输入流
    2. ZipEntry getNextEntry():得到压缩文件中的一个文件或者目录

压缩

压缩文件就是先读取一个文件夹的内容,创建 ZipEntry 放入 ZipOutputStream 下,然后用 InputStream 读取源文件内容并写入 ZipOutputStream。

/**
    * 压缩文件
    * @param sourceFilePath 待压缩的文件路径
    * @param zipFilePath    压缩后存放路径
    * @return
    */
public static void zip(String sourceFilePath, String zipFilePath) {
    File sourceFile = new File(sourceFilePath);

    if (!sourceFile.exists()) {
        System.out.println(sourceFilePath + " 不存在");
        return;
    }
    File zipFile = new File(zipFilePath);
    if (zipFile.exists()) {
        System.out.println(zipFilePath + " 已经存在");
        return;
    }

    try {
        byte[] buffer = new byte[1024];
        try (ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFile)))){

            for(File file: sourceFile.listFiles()) {
                // 创建 ZIP 中的文件,并添加进压缩包
                ZipEntry zipEntry = new ZipEntry(file.getName());
                zos.putNextEntry(zipEntry);

                // 读取待压缩的文件并写进压缩包里
                try (InputStream bis = new BufferedInputStream(new FileInputStream(file))){
                    int read = 0;
                    while ((read = bis.read(buffer)) != -1) {
                        zos.write(buffer, 0, read);
                    }
                }
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

解压

一个压缩文件就是一个特殊的 File 叫做 ZipFile,用 Enumeration 类取出 zip 文件中被压缩的文件。

List< String > fileNames=new ArrayList<  >();
try{
    ZipFile zipFile=new ZipFile(path, Charset.forName("gbk"));
    
    Enumeration< ? extends ZipEntry > entries = zipFile.entries();
    while(entries.hasMoreElements()){
        String fileName=entries.nextElement().getName();
        fileNames.add(fileName);
        System.out.println("文件名称: "+fileName);
    }
}catch (Exception  e){
    e.printStackTrace();
}

解压文件 就是先用 zipFile.entries() 读取压缩文件夹中的文件, 生成 InputStream 流后写入被解压的 输出流

/**
     * 解压
     * @param zipPath zip 文件夹路径
     * @param targetPath 解压路径
     */
    public static void unzip(String zipPath,String targetPath){

        File pathFile = new File(targetPath);
        if(!pathFile.exists()){
            pathFile.mkdirs();
        }

        try{
            //指定编码
            try(ZipFile zipFile = new ZipFile(zipPath, Charset.forName("gbk"))) {
                //遍历里面的文件及文件夹
                Enumeration entries = zipFile.entries();
                while (entries.hasMoreElements()) {
                    ZipEntry entry = (ZipEntry) entries.nextElement();
                    String zipEntryName = entry.getName();

                    try (InputStream in = zipFile.getInputStream(entry)) {
                        String outpath = (targetPath + File.separator + zipEntryName);
                        //判断路径是否存在,不存在则创建文件路径
                        File file = new File(outpath.substring(0, outpath.lastIndexOf(File.separator)));
                        if (!file.exists()) {
                            file.mkdirs();
                        }
                        //判断文件全路径是否为文件夹
                        if (new File(outpath).isDirectory())
                            continue;

                        try (OutputStream out = new FileOutputStream(outpath)) {
                            byte[] buffer = new byte[1024];
                            int len;
                            while ((len = in.read(buffer)) > 0) {
                                out.write(buffer, 0, len);
                            }
                        }
                    }
                }
            }
        }catch ( Exception e){
            e.printStackTrace();
        }
    }

总结

介绍了一下 java 中的压缩文件是如何解压与压缩的,对小伙伴们有帮助的话就点个赞哦。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    19

    文章

    2904

    浏览量

    102994
  • Zip
    Zip
    +关注

    关注

    0

    文章

    17

    浏览量

    8578
  • 压缩
    +关注

    关注

    2

    文章

    99

    浏览量

    19259
  • 文件
    +关注

    关注

    1

    文章

    540

    浏览量

    24402
收藏 人收藏

    评论

    相关推荐

    如何在Linux使用unzip命令在终端解压缩文件

    ZIP是最广泛使用的存档文件格式,支持无损数据压缩。ZIP文件是一个数据容器,其中包含一个或多个压缩文件或目录。
    发表于 12-08 16:52 4016次阅读

    Linux中常用的压缩解压缩命令介绍

    在Linux中,压缩解压缩文件是常见的操作。有时候,我们需要将大文件压缩成较小的文件,以便于传输和存储。同时,我们也需要
    发表于 07-31 11:50 1816次阅读

    winrar压缩文件图标丢失(不见了)怎么办? 不能显示压缩文件

    如上过程,文件关联全部    选择,并确定2 按住shift用鼠标右键点击一个压缩文件夹,选择“打开方式”的RAR程序,并选中“始终用这个   程序”打开就OK了。3  彻底删除WinRAR软件,用系统自带
    发表于 11-12 12:17

    WinRAR压缩文件我们该知道的几个点【jiasuba】

    真正做到事半功倍。1.制作自解压文件  如果你平时使用Win7系统下载的WinRAR来压缩文件,而你的朋友也不会使用WinRAR,但你的数据又确实必须压缩后才能够给他。这时,我们就可以
    发表于 03-14 09:47

    压缩文件可以使用pdf压缩器吗

    `  压缩文件可以使用pdf压缩器吗?现在很多办公人员都会编辑各种文档格式的文件,也都掌握了将其它可编辑格式转换为PDF文件格式的方法,但是有时候PDF
    发表于 10-27 14:03

    树莓派压缩文件

    请问各位,怎么用树莓派压缩文件夹?
    发表于 09-13 10:03

    解读Linux :先从创建一个文件夹用来存放jdk压缩文件开始

    1 创建一个文件夹用来存放jdk压缩文件mkdir /home/test/tar2 把下载好的jdk压缩文件上传到linux对应目录3 创建jdk解压目录mkdir /usr/loca
    发表于 07-04 08:06

    在 Linux 上压缩文件的 5 种方法

    在 Linux 上压缩文件的 5 种方法 在 Linux 系统上有很多可以用于压缩文件的工具,但它们的表现并不都是一样的,也不是所有的压缩效果都是一样的。在这篇文章,我们比较其中的
    发表于 05-07 15:25

    在 Linux 上压缩文件的 5 种方法

    的意思是一样的 – tar 和 gz 的组合来显示文件是一个压缩的 tar 文件。在压缩完成后,你将同时得到原始文件
    发表于 05-13 15:45

    Linux如何压缩文件

    在Linux上压缩文件的5种方法
    发表于 12-30 08:00

    JAVA教程之用GZIP压缩解压文件

    JAVA教程之用GZIP压缩解压文件,很好的JAVA的资料,快来学习吧
    发表于 04-11 17:28 6次下载

    使用Python对压缩文件的处理

    zipfile是Python里用来做zip格式编码的压缩解压缩的module,zipfile里有两个非常重要的class:ZipFile和ZipInfo。ZipFile是主要的类,用来创建和读取zip文件,而ZipInfo是存
    的头像 发表于 03-29 11:29 2179次阅读

    钛金系列压缩与非压缩文件多镜像问题

    根据客户的反馈和需求,我们做了一个Ti60压缩与非压缩文件的多镜像与加载时间的验证。
    的头像 发表于 12-01 10:16 582次阅读
    钛金系列<b class='flag-5'>压缩</b>与非<b class='flag-5'>压缩文件</b>多镜像问题

    如何在Linux上使用Pigz来更快地压缩文件

    Pigz是一款快速压缩文件的工具,它能够使用多个CPU核心进行压缩,使得压缩速度得到了极大的提升。在本文中,我们将介绍如何在Linux上使用Pigz来更快地压缩文件
    的头像 发表于 05-12 16:42 1905次阅读
    如何在Linux上使用Pigz来更快地<b class='flag-5'>压缩文件</b>

    linux解压gz文件的命令

    在Linux系统中,可以使用gzip命令解压.gz文件。gzip命令用于压缩解压缩文件,使用方法如下: 解压.gz
    的头像 发表于 11-08 14:42 1596次阅读