我以下列方式使用 ZipInputStream(代码):
public InputStream getArtifactInputStream(InputStream contentInputStream)
throws ArtifactProviderException
{
ZipInputStream zipInputStream = new ZipInputStream(contentInputStream);
InputStream artifactContent=null;
Properties externalizedProperties = null;
ZipEntry ze=null;
try {
ze = zipInputStream.getNextEntry();
} catch (IOException e) {
throw new ArtifactProviderException(e);
}
boolean propertiesFound = false;
try {
while (ze != null) {
String name = ze.getName();
if(name.endsWith(PROP_EXTENSION) && !ze.isDirectory())
{
externalizedProperties = new java.util.Properties();
externalizedProperties.load(zipInputStream);
propertiesFound = true;
}
else if(name.endsWith(ARTIFACT_EXTENSION) && !ze.isDirectory())
{
artifactContent = zipInputStream;
artifactName = name.substring(name.lastIndexOf("/")+1, name.indexOf(ARTIFACT_EXTENSION));
break;
}
ze=zipInputStream.getNextEntry();
}
} catch (IOException e) {
throw new ArtifactProviderException(e);
}
return artifactContent;
}
问题是我不确定在 zipEntry 上循环时 PROP_EXTENSION 文件是先出现还是 ARTIFACT_EXTENSION 出现,因此在任何这些情况下我都不能使用“break”,如果我不使用 break while 循环完成循环最后 artifactContent 指向包含“null”zipEntry 的 zipInputStream。
我该如何解决这个问题,这里有其他选择吗?
'contentInputStream' 基本上是 jar 或 zip。
希望我能够解释问题,如果您需要更多详细信息,请回复。
在此先感谢, Piyush