2016-04-05 9 views
0

ObjectOutputStreamを使用してリスト(オブジェクト)のコンテンツをディスクに書き込もうとしています。ObjectOutputStreamを使用してリストからファイルにオブジェクトを書き込む

これは、関連するコードです:

//Input Filetype is .xlsx with an embedded File (also .xlsx), Output Filetype should be .xlsx (Type of embedded File) 
//This code should save the embedded File to D:\\... 

List<HSSFObjectData> extrList = new ArrayList<HSSFObjectData>(); 

HSSFWorkbook embeddedWorkbook = new HSSFWorkbook(pPart.getInputStream()); 
extrList = embeddedWorkbook.getAllEmbeddedObjects(); 
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\\scan_temp\\emb.xlsx")); 

oos.writeObject(extrList); 
oos.flush(); 
oos.close(); 

このコードはemb.xlsxというファイルが作成されますが、内容は私が期待したものではありません。メモ帳で開こうとすると、次のような感じになります。

¬í sr java.util.ArrayListxÒ™Ça I sizexp w x 

私はここで間違っていますか?助けてくれてありがとう。

答えて

4

私はここで間違っていますか?

あなたは間違っていくつかのことをやっている:

  1. をあなたがシリアライズされたオブジェクトのファイルの拡張子.xlsxを悪用されています。その拡張は、XML形式のExcelスプレッドシート用です。 .bin.data.serなどを使用する必要があります。
  2. POIに組み込まれているI/O機能を使用する必要がある場合は、シリアル化を使用しています。
  3. テキストエディタでバイナリファイルを読み込もうとしています。
  4. close()の前に重複してflush()を呼び出しています。誰が、私が行ったように同じことをしようとしている場合
+0

あなたの答えをありがとう。したがって、私のデータがバイナリファイルとして保存されていれば.. ObjectOutputStreamを使って埋め込みファイル(xlsx)を元のデータフォーマットで保存することも可能ですか?どのようにサンプルコードを表示することができますか?どうもありがとうございました! – Nicola

+0

'ObjectOutputStream'は何も元の形式で保存しません。これは、オブジェクト直列化仕様で定義されている直列化プロトコルに従って格納します。スプレッドシートオブジェクトを '.xlsx'として保存する方法については、POI APIをもう一度見てみる必要があります。シリアライゼーションはあなたのためにそれを行いません。 – EJP

+0

さて、私は自分のコードがあらゆる点で間違っていたことに気がつきました。 :)私の場合、ObjectOutputStreamは役に立ちません。 – Nicola

1

は、次のコードを使用します(作品を!):

HSSFWorkbook embeddedWorkbook = new HSSFWorkbook(InputStream); 

FileOutputStream fileOut = new FileOutputStream("/outputfilepath.xls"); 
embeddedWorkbook.write(fileOut); 
fileOut.close(); 

リストに埋め込まれたオブジェクトを取得しようとしないでください。ちょうど.write()を使用して、それだけです。 :-)

関連する問題