zip中每个条目的InputStream作为Java中的字节数组传递

时间:2018-03-27 10:25:09

标签: java zip inputstream

我需要为我的zip的每个条目(包含各种文件和文件夹)的InputStream作为字节数组传递。

这是我到目前为止所做的:

private void accessEachFileInZip (byte[] zipAsByteArray) throws IOException{
    ZipInputStream zipStream = new ZipInputStream(new ByteArrayInputStream(zipAsByteArray));
    ZipEntry entry = null;

    while ((entry = zipStream.getNextEntry()) != null) {
        ZipEntry currentEntry = entry;  
        InputStream inputStreamOfCurrentEntry = ???
        zipStream.closeEntry();
    }

    zipStream.close(); 
}

使用ZipFile实例执行此操作的方法很简单,只需在此示例中调用getInputStream("EnrtryImLookingFor")

ZipFile zipFile = new ZipFile("d:\\data\\myzipfile.zip");
ZipEntry zipEntry = zipFile.getEntry("fileName.txt");       
InputStream inputStream = zipFile.getInputStream(zipEntry);

由于我无法轻易创建实例,我正在寻找其他方式。

1 个答案:

答案 0 :(得分:1)

你很接近。

ZipInputStream.getNextEntry()做了两件事:它返回下一个ZIP文件条目,但它也将当前流定位在当前条目的开头。

  

读取下一个ZIP文件条目并将流定位在   入门数据的开头。

所以只需调用getNextEntry(),然后就可以使用ZipInputStream对象,read()方法将读取当前条目的内容。

你可以这样写:

private void accessEachFileInZip (byte[] zipAsByteArray) throws IOException{
    ZipInputStream zipStream = new ZipInputStream(new ByteArrayInputStream(zipAsByteArray));

    while ((entry = zipStream.getNextEntry()) != null) {
        // The zipStream state refers now to the stream of the current entry
       ...
    }

    zipStream.close(); 
}