2012-05-23 62 views
3

這裏我的web應用程序的主要功能是上傳.zip文件並將其存儲在服務器端,但在此之前我需要執行以下任務: 1.).zip文件包含xml文件,我必須首先使用模式驗證xml文件。 2.)如果xml文件有效,比我需要將xml文件的內容轉換爲字符串而不解壓縮文件即輸入流。將inputStream從ZipFile轉換爲字符串

我在驗證XML文件全成,但我得到以下異常,而從InputStream轉換的字符串:

我有「java.io.EOFException的ZLIB輸入流意外結束」嘗試了堆棧溢出和其他論壇網站提供的所有解決方案,但我還沒有成功。任何幫助將是非常讚賞:

以下是代碼:

try 
    { 
     ZipFile zipFileUtil = new ZipFile(zipFile); 
     Enumeration<? extends ZipEntry> zipFileContents = zipFileUtil.entries(); 
     while(zipFileContents.hasMoreElements()) 
     { 

      ZipEntry zipEntry = zipFileContents.nextElement(); 
      if(zipEntry.getName().equals("File.xml")) 
      { 
       InputStream sourceFile = zipFileUtil.getInputStream(zipEntry); 
       if(isValidAsPerXSD(sourceFile)) 
       { 
        //At this line Exception is Generated 
        String xmlContent = IOUtils.toString(sourceFile); 
       } 
      } 
     } 

    } 
    catch(Throwable t) 
    { 
     System.out.println("Exception: "+t.getMessage()); 
    } 
+0

「將xml文件的內容轉換爲字符串而不解壓文件」是毫無意義的。在解壓輸入之前,沒有XML文件。請再試一次。 – EJP

回答

3

您無法讀取流「的資源文件」的兩倍! 輸入流應該被順序讀到最後。您必須關閉並重新打開它。

InputStream sourceFile = zipFileUtil.getInputStream(zipEntry); 
if(isValidAsPerXSD(sourceFile)) 
{ 
    sourceFile.close(); 
    sourceFile = zipFileUtil.getInputStream(zipEntry); 
    //At this line Exception is Generated 
    String xmlContent = IOUtils.toString(sourceFile); 
} 
sourceFile.close(); 
+0

你也可以重置流 – kromit

+0

真棒.......它的工作感謝@Lotfi。所以結論是,我需要努力工作以改善我的CORE概念.. :)再次感謝 – Milesh

+0

@kromit:我不確定ZipInputStream是否支持重置。如果是這樣,那麼重置它是正確的方式:) – Lotfi