2016-12-12 8 views
0

У меня есть метод, который возвращает StreamingOutput Объект. И я хочу написать этот объект StreamingOutput в файл excel. И я написал следующий код, который дает мне java.lang.ClassCastException Исключение.Запись в файл Excel с использованием объекта StreamingOutput. (java.lang.ClassCastException)

StreamingOutput stream = getStreamObject(); 
    SXSSFWorkbook workBook = (SXSSFWorkbook) stream; //Exception occurs here 

    FileOutputStream fileOut = new FileOutputStream("/save/excel/file/here"); 
    workBook.write(fileOut); 
    fileOut.flush(); 
    fileOut.close(); 

Итак, пожалуйста, помогите мне с этим. Заранее спасибо.

+1

прямо сейчас вы хотите создать новый объект типа 'SXSSFWorkbook' из StreamingOutput. неудивительно, что вы получаете там исключение. вы должны создать новую строку/ячейку и вызвать 'stream.write()' на cell.setValue() – XtremeBaumer

+0

Чтобы быть уверенным, вы переписали этот класс? SxSSFWorkbook от apache, похоже, не реализует streamingoutput. – Tosh

+0

@Tosh Нет, я не переписывал класс SXSSFWorkbook. Если apache не реализует StreamingOutput, есть ли другой способ записать объект StreamingOutput в excel fil? Другими словами, я имею в виду любой промежуточный объект, который может быть конвертирован из StreamingOutput и может использоваться SXSSFWorkbook для записи в excel. –

ответ

1

StreamingOutput метод записи должен быть переопределен для возврата выходного объекта. Вот пример:

public Response streamExample(){ 
     StreamingOutput stream = new StreamingOutput() { 
      @Override 
      public void write(OutputStream out) throws IOException, WebApplicationException { 
       Writer writer = new BufferedWriter(new OutputStreamWriter(out)); 
       for (int i = 0; i < 10000000 ; i++){ 
        writer.write(i + " "); 
       } 
       writer.flush(); 
      } 
     }; 
     return Response.ok(stream).build(); 
    } 

Пожалуйста, проверьте Docs of Streaming output и here для получения дополнительной информации