• 使用 ZipArchiveInputStream 读取压缩包内文件总数


    读取压缩包内文件总数

    简介

    ZipArchiveInputStream 是 Apache Commons Compress 库中的一个类,用于读取 ZIP 格式的压缩文件。在处理 ZIP 文件时,编码格式是一个重要的问题,因为它决定了如何解释文件中的字符数据。通常情况下,ZIP 文件中的文本文件是以特定的字符编码格式存储的,例如 UTF-8 或 ISO-8859-1。但是,ZIP 规范并没有规定文件的编码格式,因此不同的 ZIP 文件可能使用不同的编码。

    ZipArchiveInputStream 允许用户设置编码格式,以正确处理 ZIP 文件中的文件名或文件内容。默认情况下,ZipArchiveInputStream 可能使用 UTF-8 编码来读取文件名,但如果 ZIP 文件中的文件名使用了不同的编码,那么就需要显式地设置正确的编码格式。

    例如,如果 ZIP 文件中的文件名使用了 GBK 编码,那么在创建 ZipArchiveInputStream 对象时,需要调用 setEncoding("GBK") 方法来设置正确的编码格式。这样,ZipArchiveInputStream 就能正确地解析文件名,避免乱码问题。

    使用 ZipArchiveInputStream 的基本步骤如下:

    1. 创建一个 ZipFile 对象,传入一个 ZIP 文件的 File 对象或 ZIP 文件的路径作为参数。
    2. 通过 ZipFile 对象的 getInputStream 方法获取一个 InputStream 对象,用于读取 ZIP 文件的数据。
    3. 创建一个 ZipArchiveInputStream 对象,传入上一步获取的 InputStream 对象作为参数。
    4. 使用 ZipArchiveInputStream 对象的 getNextEntry 方法来获取 ZIP 文件中的每一个条目(即压缩包内的文件或文件夹),并对其进行处理。可以使用 read 方法读取条目的数据。
    5. 处理完一个条目后,使用 closeEntry 方法关闭该条目。

    代码逻辑

    public class Test {
        public static void main(String[] args) {
            AtomicInteger atomicInteger = new AtomicInteger(0);
            File file = FileUtil.file("C:\\Users\\a\\Downloads\\train_val_images.zip");
            try (ZipArchiveInputStream inputStream = new ZipArchiveInputStream(new FileInputStream(file),UTF_8)){
                ZipArchiveEntry nextZipEntry;
                while ( (nextZipEntry = inputStream.getNextZipEntry()) != null)
                if (!nextZipEntry.isDirectory()){
                    atomicInteger.incrementAndGet();
                }
            }  catch (Exception e) {
                e.printStackTrace();
            }
            System.out.println(atomicInteger.intValue());
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    测试效果

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    第四十六章 命名空间和数据库 - 系统提供的数据库
    JavaScript实现经典消方块游戏
    Java线程学习入门(三)
    强网杯2022——WEB
    每日刷题打卡Day18
    Java实现加密(一)AES加解密
    给你捋清楚Java面向对象的继承关系
    华为OD机考算法题:MVP争夺战
    全栈工程师必须要掌握的前端JavaScript技能
    初识Zookeeper
  • 原文地址:https://blog.csdn.net/Greenarrow961224/article/details/136743793