Apache POIで作成したHSSFWorksheet#getBytes()をファイル出力すると壊れている
Apache POIで作成したHSSFWorksheetからgetBytes()メソッドで取得したバイト配列をファイル出力したのですが、ファイルが壊れてしまっています。
よく調べてみると、HSSFWorksheet#write(java.io.OutputStream)というメソッドもあり、こちらのメソッドで出力したファイルは正常に開くことができました。
ソースコードを読んでみると、確かにHSSFWorksheet#write(java.io.OutputStream)の中ではHSSFWorksheet#getBytes()の値を使用しているようですが、なんだかそれ以外に色々とやっているようです(素直にHSSFWorksheet#getBytes()の値をファイル出力しているわけではない)。
で、今回はどうしてもHSSFWorksheetのバイト配列が必要でしたので、以下のメソッドを作成してみました…。
何故一旦メモリ上に出力する必要があるのでしょうか…。
どなたか良いアイデアがあったら教えていただきたいです…。
/** * HSSFWorkbookのバイト配列を返します。<br> * {@link HSSFWorkbook#getBytes()}をそのまま使用すると正しい情報が得られないため、<br> * 一旦メモリ上に{@link HSSFWorkbook#write(java.io.OutputStream)}で出力したバイト配列を返します。 * @param workBook 対象のHSSFWorkbook * @return HSSFWorkbookのバイト配列 * @throws IOException */ private byte[] getBytes(HSSFWorkbook workBook) throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); // メモリ上に出力してすぐに取得 workBook.write(out); byte[] result = out.toByteArray(); out.close(); return result; }