java.io.IOException:在java.util.zip.ZipInputStream.ensureOpen(ZipInputStream.java:66)中关闭了流

时间:2015-07-28 05:52:58

标签: java java-io

以下是代码段。

while (iterator.hasNext()) {
    FileItemStream item = iterator.next();
    InputStream in = item.openStream();
    ZipInputStream zin =new ZipInputStream(new BufferedInputStream(in));
    for (ZipEntry zipEntry;(zipEntry = zin.getNextEntry()) != null; )
    {
        System.out.println("reading zipEntry " + zipEntry.getName());
        if(zipEntry.getName().endsWith(".xls")){                    
            POIFSFileSystem fs = new POIFSFileSystem(zin);
            HSSFWorkbook wb = new HSSFWorkbook(fs); 
            HSSFSheet sheet = wb.getSheetAt(0);
            Iterator rows = sheet.rowIterator(); 
            while( rows.hasNext() ) { 
                ... some code here
            }                                                       
        }
    }             
}

我在读取一个'xls'文件后无法读取其他文件时出现异常。提前致谢

1 个答案:

答案 0 :(得分:3)

您正在调用POIFSFileSystem(InputStream)构造函数,documented为:

  

从InputStream创建POIFSFileSystem。通常读取流直到EOF。 流始终关闭。

(强调我的。)

这意味着您在第一次迭代后关闭ZipInputStream - 您不想这样做。

相反,请致电POIFSFileSystem.createNonClosingInputStream

  

希望避免构造函数自动关闭行为的客户端的便捷方法。

换句话说:

if (zipEntry.getName().endsWith(".xls")) {
   POIFSFileSystem fs = POIFSFileSystem.createNonClosingInputStream(zin);
   ...
}