完全迭代ZipEntry时的'null'(来自ZipInputStream)

时间:2013-02-07 13:53:17

标签: java zipinputstream

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

0 个答案:

没有答案