2016-04-05 6 views
0

Ich versuche, den Inhalt einer Liste (Objekt) auf der Festplatte mit ObjectOutputStream schreiben.Objekt aus Liste in Datei schreiben, mit ObjectOutputStream

Dies ist der entsprechende Code:

//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(); 

Dieser Code erstellt eine Datei namens emb.xlsx, aber der Inhalt ist nicht das, was ich erwartet hatte. Wenn ich versuche, mit dem Editor zu öffnen, ist es etwas wie:

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

Was mache ich hier falsch? Danke für jede Hilfe.

Antwort

4

Was mache ich hier falsch?

Sie falsch machen mehrere Dinge:

  1. Sie mißbrauchen die .xlsx Erweiterung für eine Datei von serialisierten Objekten. Diese Erweiterung gilt für Excel-Tabellen im XML-Format. Sie sollten etwas wie , .data, .ser usw. verwenden.
  2. Sie verwenden Serialisierung, wenn Sie die in POI integrierten E/A-Funktionen verwenden sollten.
  3. Sie versuchen, eine Binärdatei mit einem Texteditor zu lesen.
  4. Sie rufen redundant flush() vor close() auf.
+0

Danke für deine Antwort. Also, wenn meine Daten als Binärdatei gespeichert sind. Ist es überhaupt möglich, die eingebettete Datei (xlsx) in ihrem ursprünglichen Datenformat mit ObjectOutputStream zu speichern? Können Sie mir einen Beispielcode zeigen, wie es geht? Vielen Dank! – Nicola

+0

'ObjectOutputStream' speichert nichts 'in seinem ursprünglichen Format'. Es speichert es gemäß einem Serialisierungsprotokoll, das in der Objektserialisierungsspezifikation definiert ist. Sie müssen die POI-API erneut prüfen, um Tabellenobjekte als '.xlsx' zu speichern. Serialisierung wird es nicht für Sie tun. – EJP

+0

Okay, ich habe gerade gemerkt, dass mein Code in jeder Hinsicht falsch war. :) ObjectOutputStream hilft in meinem Fall nicht. – Nicola

1

Wenn jemand anderes das gleiche versuchen, wie ich es tat, verwenden Sie den folgenden Code (funktioniert!):

HSSFWorkbook embeddedWorkbook = new HSSFWorkbook(InputStream); 

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

Versuchen Sie nicht, die eingebettete Objekte in einer Liste zu erhalten. Verwenden Sie einfach .write() und das ist alles. :-)

Verwandte Themen