有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

  1. # 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));
            }
    }