如何获取代表 ZipInputStream 中一个文件的 InputStream
How to get an InputStream representing one file in a ZipInputStream
我有以下情况:
我收到一个以字节数组形式通过网络发送的 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();
}
}
那么,在那个时候我可以做些什么来 return 一个 InputStream 正好代表 ZipEntry 在那个时候代表的一个文件?我考虑过 returning zipInputStream,但由于我不知道它是如何工作的,我担心这样做还会包括该文件之后仍在流中的所有文件 return也编辑了。
您几乎就在那里。尝试
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;
}
我有以下情况:
我收到一个以字节数组形式通过网络发送的 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();
}
}
那么,在那个时候我可以做些什么来 return 一个 InputStream 正好代表 ZipEntry 在那个时候代表的一个文件?我考虑过 returning zipInputStream,但由于我不知道它是如何工作的,我担心这样做还会包括该文件之后仍在流中的所有文件 return也编辑了。
您几乎就在那里。尝试
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;
}