我正在尝试使用 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
我在这里做错了什么?谢谢你的帮助。
最佳答案
What am I doing wrong here?
你做错了几件事:
- 您误用了序列化对象文件的
.xlsx
扩展名。该扩展适用于 XML 格式的 Excel 电子表格。您应该使用.bin
、.data
、.ser
等。 - 当您应该使用 POI 内置的 I/O 工具时,您却在使用序列化。
- 您正在尝试使用文本编辑器读取二进制文件。
- 您在
close()
之前重复调用了flush()
。
关于java - 使用 ObjectOutputStream 将对象从列表写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36422720/