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

Java 使用ObjectOutputStream将对象从列表写入文件,java,apache-poi,outputstream,objectoutputstream,poi-hssf,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> ex

我正在尝试使用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();
我做错了什么?谢谢你的帮助

我做错了什么

你做错了几件事:

  • 您对序列化对象的文件误用了
    .xlsx
    扩展名。该扩展用于XML格式的Excel电子表格。您应该使用类似于
    .bin
    .data
    .ser
    等的内容
  • 当您应该使用POI中内置的I/O功能时,您正在使用序列化
  • 您正在尝试使用文本编辑器读取二进制文件
  • 您在
    close()
    之前重复调用
    flush()
  • 我做错了什么

    你做错了几件事:

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

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


    不要试图将嵌入的对象放入列表中。只需使用
    .write()
    即可。:-)

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


    不要试图将嵌入的对象放入列表中。只需使用
    .write()
    即可。:-)

    谢谢你的回答。因此,如果我的数据存储为二进制文件。。甚至可以使用ObjectOutputStream以原始数据格式保存嵌入文件(xlsx)吗?你能给我看一个示例代码吗?多谢各位
    ObjectOutputStream
    不以“原始格式”存储任何内容。它根据对象序列化规范中定义的序列化协议进行存储。您需要再次了解POI API,了解如何将电子表格对象存储为
    .xlsx
    。序列化不适合您。好吧,我刚刚意识到我的代码在各个方面都是错误的。:)ObjectOutputStream对我的情况没有帮助。谢谢你的回答。因此,如果我的数据存储为二进制文件。。甚至可以使用ObjectOutputStream以原始数据格式保存嵌入文件(xlsx)吗?你能给我看一个示例代码吗?多谢各位
    ObjectOutputStream
    不以“原始格式”存储任何内容。它根据对象序列化规范中定义的序列化协议进行存储。您需要再次了解POI API,了解如何将电子表格对象存储为
    .xlsx
    。序列化不适合您。好吧,我刚刚意识到我的代码在各个方面都是错误的。:)ObjectOutputStream对我的情况没有帮助。
    ¬í sr java.util.ArrayListxÒ™Ça I sizexp    w    x
    
    HSSFWorkbook embeddedWorkbook = new HSSFWorkbook(InputStream);
    
    FileOutputStream fileOut = new FileOutputStream("/outputfilepath.xls");
    embeddedWorkbook.write(fileOut);
    fileOut.close();