0

我以下列方式使用 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

4

0 回答 0