java - 无法读取整个 header ;读取 0 字节;预计 512 字节

标签 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);

请帮帮我?

最佳答案

如果我们看一下 HeaderBlocks 类,我们可以看到这些 block :

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 个字节,然后调用私有(private)构造函数。

如果没有足够的字节可供读取,则 readFirst512 方法会抛出异常。

此外,POI's document假设 POI 文件系统结构以 512 字节的 header block 开始。

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

关于java - 无法读取整个 header ;读取 0 字节;预计 512 字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12616689/

相关文章:

java - 通过 java 适用于所有平台的原生 LAF

java - 创建 Java Apache POI 折线图,其中日期显示在水平 X 轴上

grails - Apache POI 和 JExcel Api 的评估

java - 无法在 Windows 命令提示符下使用 javac 编译 .java 文件

java - 使用 Apache POI 删除特定 Excel 工作表上的所有边框

java - 我们可以使用Javassist向类添加导入语句吗

Java文件读取和字符串分割问题

java - 用tomcat PermGen空间做什么

java - 如何使滚动 Pane 中的某些单词着色?

java - 使用 Apache poi 生成 .docx 时如何为页脚添加间距?