如何提取和读取作为字节数组发送的zip文件的条目

时间:2014-10-31 11:27:05

标签: java junit

简而言之,我正在尝试编写一个接收Zip文件作为byte []数组的方法,我想要做的是返回Zip文件中的条目数(文件)并测试如果他们是6个条目。

以下是我到目前为止所做的事情,它将FileNotFoundException投放在line 3

  public List<ZipEntry> extractZipEntries(byte[] content) throws IOException {
    List<ZipEntry> entries = new ArrayList<>();

    ZipFile zip = new ZipFile(content.toString()); //Line 3

    for (Enumeration<?> e = zip.entries(); e.hasMoreElements();) {
        ZipEntry entry = (ZipEntry) e.nextElement();
        entries.add(entry);
    }
    return entries;
  }

测试在这里:

 List<ZipEntry> zipEntries = SomeClassName.extractZipEntries(content);
 assertTrue(zipEntries.size() == 6);

另外,如果可能的话,建议采用更好的方法,但理想情况下,我在上面所做的就是直截了当。

谢谢!

1 个答案:

答案 0 :(得分:1)

看到来源是byte[],您需要使用ByteArrayInputStream来阅读该文件。

public List<ZipEntry> extractZipEntries(byte[] content) throws IOException {
    List<ZipEntry> entries = new ArrayList<>();

    ZipInputStream zi = null;
    try {
        zi = new ZipInputStream(new ByteArrayInputStream(content));

        ZipEntry zipEntry = null;
        while ((zipEntry = zi.getNextEntry()) != null) {
            entries.add(zipEntry);
        }
    } finally {
        if (zi != null) {
            zi.close();
        }
    }
    return entries;
}