源代码
if (POIFSFileSystem.hasPOIFSHeader(in)) {new HSSFWorkbook(in);}if (POIXMLDocument.hasOOXMLHeader(in)) {new XSSFWorkbook(OPCPackage.open(in));}
当使用xls格式文件时报错,由于是xls格式,第一个判断成立,会执行new HSSFWorkbook(in),poi是将xls文件内容一次性加载进内存的,读取完成后会将流关闭,当进入第二个判断时会出现流关闭异常,异常堆栈如下。
Exception in thread "main" java.io.IOException: Stream closedat java.io.PushbackInputStream.ensureOpen(PushbackInputStream.java:74)at java.io.PushbackInputStream.read(PushbackInputStream.java:166)at org.apache.poi.util.IOUtils.readFully(IOUtils.java:121)at org.apache.poi.util.IOUtils.readFully(IOUtils.java:106)at org.apache.poi.POIXMLDocument.hasOOXMLHeader(POIXMLDocument.java:121)
