2016-04-05 4 views
0

Я пытаюсь записать содержимое списка (объекта) на диск с помощью ObjectOutputStream.Запись объекта из списка в файл с использованием 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 

Что я здесь делаю неправильно? Спасибо за любую помощь.

ответ

4

Что я здесь делаю неправильно?

Вы делаете несколько вещей неправильно:

  1. Вы злоупотребляя .xlsx расширение для файла сериализованных объектов. Это расширение предназначено для таблиц Excel в формате XML. Вы должны использовать что-то вроде .bin, .data, .ser и т. Д.
  2. Вы используете сериализацию, когда вы должны использовать объекты ввода-вывода, встроенные в POI.
  3. Вы пытаетесь прочитать двоичный файл с помощью текстового редактора.
  4. Вы избыточно звонят flush() до close().
+0

Спасибо за ваш ответ. Поэтому, если мои данные хранятся в виде двоичного файла. Возможно ли сохранить встроенный файл (xlsx) в исходном формате данных с помощью ObjectOutputStream? Можете ли вы показать мне пример кода, как это сделать? Большое спасибо! – Nicola

+0

'ObjectOutputStream' ничего не хранит в исходном формате. Он хранит его в соответствии с протоколом сериализации, определенным в спецификации Serialization Object. Вам нужно еще раз взглянуть на API POI, чтобы сохранить объекты электронных таблиц как '.xlsx'. Сериализация не сделает это за вас. – EJP

+0

Хорошо, я просто понял, что мой код был неправильным во всех отношениях. :) ObjectOutputStream в моем случае не помогает. – Nicola

1

Если кто-то пытается то же самое, что я сделал, используйте следующий код (работает!):

HSSFWorkbook embeddedWorkbook = new HSSFWorkbook(InputStream); 

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

Не пытайтесь получить вложенные объекты в список. Просто используйте .write(), и все. :-)

Смежные вопросы