无法读取整个标题; 0字节读取;预计512字节

时间:2012-09-27 08:02:26

标签: java apache-poi

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

请帮帮我?

3 个答案:

答案 0 :(得分:6)

如果我们看看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来说还不够大。

答案 1 :(得分:3)

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

答案 2 :(得分:0)

如果您将文件放在不同的文件夹中进行读取或写入,则可能无法获得错误。像Mozilla的“下载”这样的默认文件夹似乎有限制权限。