3

我正在使用 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);

请帮我?

4

3 回答 3

7

如果我们看一下 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 的文档说 POI 文件系统结构以 512 字节的标头块开始。

所以...看来您的文件对于 POI 来说不够大。

于 2012-09-27T08:49:57.057 回答
3

在 MS-Excel 中打开并另存为其他名称。再试一次。

于 2012-11-04T13:46:38.320 回答
0

如果您将正在读取或写入的文件放在不同的文件夹中,您可能不会收到错误消息。似乎某些默认文件夹(例如 Mozilla 的“下载”)具有受限权限。

于 2016-08-12T12:21:51.440 回答