刘俊凯 发表于 2024-7-16 02:36:54

使用 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 的根本步骤如下:

[*]创建一个 ZipFile 对象,传入一个 ZIP 文件的 File 对象或 ZIP 文件的路径作为参数。
[*]通过 ZipFile 对象的 getInputStream 方法获取一个 InputStream 对象,用于读取 ZIP 文件的数据。
[*]创建一个 ZipArchiveInputStream 对象,传入上一步获取的 InputStream 对象作为参数。
[*]使用 ZipArchiveInputStream 对象的 getNextEntry 方法来获取 ZIP 文件中的每一个条目(即压缩包内的文件或文件夹),并对其举行处理处罚。可以使用 read 方法读取条目的数据。
[*]处理处罚完一个条目后,使用 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());
    }
}
测试效果

https://img-blog.csdnimg.cn/direct/980d31a03ff04a349379b79c850601d4.png#pic_center
https://img-blog.csdnimg.cn/direct/78af60c485324dd8981e3c625d7dfc85.png#pic_center

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 使用 ZipArchiveInputStream 读取压缩包内文件总数