使用ObjectOutputStream

时间:2016-04-05 09:44:45

标签: java apache-poi outputstream objectoutputstream poi-hssf

我正在尝试使用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

我在这里做错了什么?谢谢你的帮助。

2 个答案:

答案 0 :(得分:4)

  

我在这里做错了什么?

你做错了几件事:

  1. 您滥用序列化对象文件的.xlsx扩展名。该扩展名适用于XML格式的Excel电子表格。您应该使用.bin.data.ser
  2. 之类的内容
  3. 当您应该使用POI中内置的I / O工具时,您正在使用序列化。
  4. 您正在尝试使用文本编辑器读取二进制文件。
  5. 您在flush()之前对close()进行了冗余调用。

答案 1 :(得分:1)

如果其他人正在尝试与我相同的事情,请使用以下代码(有效!):

.write()

不要尝试将嵌入对象放入列表中。只需使用public static double distanceToSegment( final R3 v, final R3 a, final R3 b ) 就可以了。 : - )