如何获取zip文件内容的输入流?

时间:2016-08-08 09:50:42

标签: java zip inputstream

我有一个zip文件的输入流,我将从Web服务响应中获取它。此zip文件包含一个XML文件。我需要从zip文件的输入流中提取此XML文件的输入流。请帮忙。我尝试过以下代码。但没有成功。

DataHandler dataHandler = odDocClient.getUniqueDoc(null, null);
inputStream = dataHandler.getInputStream();
ZipInputStream zipInputStream = new ZipInputStream(inputStream);
ZipEntry zipEntry=zipInputStream.getNextEntry();            
File tempZipFile= new File("D:\\WorkSpace\\Invoicing\\ZIP\\tempZip1.zip");
FileOutputStream fileOutputStream= new FileOutputStream(tempZipFile);
IOUtils.copy(inputStream, fileOutputStream);
inputStream.close();
inputStream.close();
fileOutputStream.close();
ZipFile zipFile = new ZipFile(tempZipFile); 
inputStream=zipFile.getInputStream(zipEntry);

此输入流将被进一步使用。

使用上面的代码我得到以下异常。

java.util.zip.ZipException: invalid END header (bad central directory offset)
    at java.util.zip.ZipFile.open(Native Method)
    at java.util.zip.ZipFile.<init>(ZipFile.java:215)
    at java.util.zip.ZipFile.<init>(ZipFile.java:145)
    at java.util.zip.ZipFile.<init>(ZipFile.java:159)

1 个答案:

答案 0 :(得分:0)

你能试试这个,这里的变量&#34;是&#34;是你的输入流,对于时间bean我在数组大小中将long转换为int,但在你的代码中你必须正确地读取流。

ZipInputStream zis = new ZipInputStream(is);        
ZipEntry ze;
    while((ze=zis.getNextEntry()) != null){
        if(!ze.isDirectory() && ze.getName().endsWith(".xml")) {                
            byte[] arr = new byte[(int)ze.getSize()]; // an array of size in zip entry
            zis.read(arr);
            // Your contains is here 
            System.out.println(new String(arr));
        }
}