【问题标题】:How to get input stream of contents of a zip file?如何获取 zip 文件内容的输入流?
【发布时间】:2016-08-08 09:50:42
【问题描述】:

我有一个 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)

【问题讨论】:

    标签: java zip inputstream


    【解决方案1】:

    你能试试这个吗,这里变量“is”是你的输入流,对于时间 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));
            }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-10
      • 1970-01-01
      • 2022-07-02
      • 2013-05-18
      • 1970-01-01
      相关资源
      最近更新 更多