我正在以下列方式使用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;
}
问题是我不确定PROP_EXTENSION文件在zipEntry上循环时是首先出现还是ARTIFACT_EXTENSION,因此我不能在任何这些情况下使用“break”,如果我不使用break while循环完成循环,最后artifactContent指向zipInputStream,它包含'null'zipEntry。
我如何解决这个问题,这里有替代方案吗?
'contentInputStream'基本上是jar或zip。
希望我能够解释这个问题,如果您需要更多详细信息,请退回。
提前致谢, PIYUSH