我正在使用Apache poi 3.8读取xls文件,但出现异常:
java.io.IOException: Unable to read entire header; 0 bytes read; expected 512 bytes
at org.apache.poi.poifs.storage.HeaderBlock.alertShortRead(HeaderBlock.java:226)
at org.apache.poi.poifs.storage.HeaderBlock.readFirst512(HeaderBlock.java:207)
at org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:104)
at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:138)
使用的代码示例:
FileInputStream myInput = new FileInputStream(excelFilePathWithExtension);
logger.debug("FileInputStream::"+myInput);
POIFSFileSystem myFileSystem = new POIFSFileSystem(myInput);
logger.debug("POIFSFileSystem::"+myFileSystem);
Workbook workbook = WorkbookFactory.create(myFileSystem);
请帮我?
最佳答案
如果我们看一下HeaderBlocks类,我们可以看到以下块:
public HeaderBlock(InputStream stream) throws IOException {
// Grab the first 512 bytes
// (For 4096 sized blocks, the remaining 3584 bytes are zero)
// Then, process the contents
this(readFirst512(stream));
...
}
您使用的构造函数将读取输入流的前512个字节,然后调用私有构造函数。
如果没有足够的字节可读取,则
readFirst512
方法将引发异常。另外,POI's document说POI文件系统结构以512字节的头块开始。
所以...看来您的档案不足以容纳POI。