Apache POIを使用して、Excel ファイルからデータを抽出しています。
POI HSSFWorkbook クラスHSSFWorkbook wb = new HSSFWorkbook(inputStreamX);
をインスタンス化するために InputStream が必要です
InputStream inputStream = new FileInputStream(new File("/home/xxx/workspace/myproject/test/resources/importTest.xls"));
InputStream inputStream2 = new FileInputStream(getClass().getResource("/importTest.xls").getFile());
InputStream inputStream3 = new ClassPathResource("importTest.xls").getInputStream();
inputStream を使用して POI オブジェクトを構築すると、正常に動作します。
しかし、inputStream2 と inputStream3 はこの例外をスローしています
java.io.IOException: Invalid header signature; read -2300849302551019537, expected -2226271756974174256
at org.apache.poi.poifs.storage.HeaderBlockReader.<init>(HeaderBlockReader.java:100)
at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:84)
どうやらバイナリファイルのヘッダが違っていて、ライブラリがExcelファイルとして認識できていないようです。理由がわかりません。
私が見る唯一の違いは、inputStream2 と 3 がクラスローダーを使用してファイルを検索していることです。( ClassPathResourceは Spring クラスです)。
ファイルパスをシステムから分離したいと思います。だから私はinputStream2または3のようなものを好むだろう.
なぜこれが起こっているのかについて何か考えがありますか?
ありがとうございました
更新:
inputStream と inputStream2 をディスクに書き込もうとしました。
inputStream に付属する Excel ファイルは問題ありません。inputStream2 には、実際のコンテンツをラップするいくつかの奇妙な文字を含む Excel ファイルが含まれています。
ビルド中に maven が何らかの方法で Excel ファイルを破損しているようです。
したがって、基本的には、classLoader(の下/home/xxx/workspace/myproject/target/test-classes/importTest.xls
)で取得したファイルは問題ありません。
何か案が?