在Java中计算存档文件的数量

7

我正在尝试计算归档文件的数量。我的问题是我的代码计算所有实体,包括文件夹(例如,如果我有一个复杂的目录,但只有一个文件,我无法验证我的存档)。我使用size()方法。

import java.nio.file.Path;
import javax.enterprise.context.Dependent;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import ru.cntp.eupp.roster.Notification;
import java.util.ArrayList;
import java.util.zip.ZipFile;
import java.util.List;
import java.util.Enumeration;

/*
 * @author dfaevskii
 */
@Dependent
public class ZipValidator {

     public void validate(Path pathToFile) throws IOException {

         ZipFile zipFile = new ZipFile(pathToFile.toFile());

         if (zipFile.size() != 1 && zipFile.size() != 2) {
             throw new InvalidZipException("The number of files in archive is more than  2");
         } 
     }
 }
2个回答

10

您可以使用 entries() 方法来获取 zip 文件中 ZipEntry 的枚举,然后检查每个条目以查看它是否为目录 isDirectory():

int countRegularFiles(final ZipFile zipFile) {
    final Enumeration<? extends ZipEntry> entries = zipFile.entries();
    int numRegularFiles = 0;
    while (entries.hasMoreElements()) {
        if (! entries.nextElement().isDirectory()) {
            ++numRegularFiles;
        }
    }
    return numRegularFiles;
}

我使用了 new ZipFile(file, Charset.forName("Cp437")) 来声明我的 ZipFile 对象来处理重音符号(在此之前,我遇到了一个 java.lang.IllegalArgumentException: MALFORMED 错误)。 - Y-B Cause

4

我使用 size() 方法。

问题在于,size() 返回 zip 文件中所有条目的数量。如果要计算没有目录的条目数,您需要遍历条目并检查它是否为目录:

...
int count = 0;
Enumeration<? extends ZipEntry> zipEntries = zipFile.entries();
while (zipEntries.hasMoreElements()) {
    ZipEntry entry = zipEntries.nextElement();
    if (!entry.isDirectory()) {
       count++;
    }
}
...

另请参阅

这里还有一些相关链接。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接