java - 使用 ObjectOutputStream 将对象从列表写入文件

标签 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

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

最佳答案

What am I doing wrong here?

你做错了几件事:

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

关于java - 使用 ObjectOutputStream 将对象从列表写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36422720/

相关文章:

java - 如何使用apache poi获取子图形的绝对位置

java - 赋予函数创建由 String 参数定义的新对象的能力

java - 不一致的 java.util.zip.ZipException : ZipFile invalid LOC header on gradle project

java - Log4J SQL 日志记录 TopLink

java - 如何在java中读取doc和docx

java - 如何为我的应用程序创建数据文件夹?

java - 异步删除和更新数据库中的项目

java - 如何使用 Apache POI 解密 .doc/docx 文件?

jQuery ajax 调用 httphandler 返回 zip 文件

java - 通过分页写入 Jena RDF 模型