如何获取表示ZipInputStream中一个文件的InputStream



我有以下情况:

我正在通过网络以字节数组的形式发送一个Zip文件。我不想在本地保存该文件,而是以该归档中的单个文件为目标,并将其作为InputStream导入到我的解决方案中。

到目前为止,我已经设法确定了正确的ZipEntry。然而,从这里开始,所有的Zip教程都通过文件名读取条目来继续,这在我的情况下自然不起作用,因为Zip文件在本地不存在。

private void InputStream getReqifInputStreamFrom(byte[] reqifzFileBytes){
ByteArrayInputStream inputStream = new ByteArrayInputStream(reqifzFileBytes);
ZipInputStream zipInputStream = new ZipInputStream(inputStream);
ZipEntry zipEntry = zipInputStream.getNextEntry();
while (zipEntry != null) {
String fileName = zipEntry.getName();
if (fileName.endsWith(REQIF_FILE_SUFFIX)) {
return ???;
}
zipEntry = zipInputStream.getNextEntry();
}
}

那么,在这一点上,我可以做些什么来返回一个InputStream,该InputStream恰好代表ZipEntry在那一点上代表的一个文件?我曾考虑过只返回zipInputStream,但由于我不知道它是如何工作的,我担心这样做也会包括在要返回的文件之后仍在流中的所有文件。

您实际上已经做到了。尝试

private InputStream getReqifInputStreamFrom(byte[] reqifzFileBytes) throws IOException {
InputStream result = null;
ByteArrayInputStream inputStream = new ByteArrayInputStream(reqifzFileBytes);
ZipInputStream zipInputStream = new ZipInputStream(inputStream);
ZipEntry zipEntry = zipInputStream.getNextEntry();
while (zipEntry != null) {
String fileName = zipEntry.getName();
if (fileName.endsWith(REQIF_FILE_SUFFIX)) {
result = zipInputStream;
break;
}
zipEntry = zipInputStream.getNextEntry();
}
return result;
}

最新更新