3

xls ファイルの読み取りに Apache poi 3.8 を使用していますが、例外が発生しました。

        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 に答える