我需要为我的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);
由于我无法轻易创建实例,我正在寻找其他方式。
答案 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();
}