【问题标题】:How to count specific file in a zip file如何计算 zip 文件中的特定文件
【发布时间】:2023-10-14 06:37:01
【问题描述】:

我有一个包含许多 zip 条目的 zip 文件 (许多 png 图像)。

我要统计包含单词"idle"的图片数量

zip 条目是这样的:

on001,on002...on0037-idle001,idle002...idle0085

请告诉我如何计算名称中包含单词"idle"的文件数

我知道如何计算.size() 压缩包中的所有文件,但我如何计算特定文件?

【问题讨论】:

    标签: java zip zipfile


    【解决方案1】:

    遍历.entries() 并检查每个ZipEntrys 名称:

    ZipFile zipFile = new ZipFile("???.zip");
    
    int count = 0;
    
    Enumeration<? extends ZipEntry> entries = zipFile.entries();
    while (entries.hasMoreElements()) {
        ZipEntry entry = entries.nextElement();
        if (entry.getName().contains("idle")) count++;
    }
    

    【讨论】:

    • 不错,但我得到错误 foreach 不适用于类型 'java.util.enumeration
    • 顺便说一句,我找到了另一种方法,但它太慢太迟钝了..你能说出原因吗?
    • 如果我猜的话,我会说这种方法可能只是在 zip 文件的开头使用目录,而您的方法实际上是在寻找每个 zip 文件的开头条目,如果你真的打开它们,这没关系,但如果你不是,则需要更多的工作。
    【解决方案2】:

    我通过这段代码解决了这个问题,但是它太慢了,韦斯顿的代码要好得多

                FileInputStream fis = new FileInputStream("zip file adress");
                ZipInputStream zis = new ZipInputStream(fis);
                ZipEntry ze = null;
    
    
                int idlecount;
                while ((ze = zis.getNextEntry()) != null){
                    if (ze.getName().contains("idle")){
                        idlecount++;
                    }
    
                }
    

    【讨论】: