2014-05-12 1 views
0

Я читаю записи db и создаю в памяти XSSFWorksbook.Запись в память XSSFWorkbooks в память zip

Как только это будет сделано, я пишу эту книгу, чтобы получить выходной поток zip. Zip создается правильно, но файл xlsx не генерируется. Вместо первенствует это Creats папки и файлы, такие как _rel, рабочие листы, sharedStrings, стили и workbook.xml

//Read records from db and create workbook 
public static XSSFWorkbook buildReportDocuement(int reportIndex, 
    List<Object> result) throws IOException { 
    XSSFWorkbook workbook = new XSSFWorkbook(); 
    XSSFSheet excelSheet = workbook.createSheet(REPORT_NAME_PREFIX); 
    setExcelHeader(excelSheet); 
    processActivityReportData(result, excelSheet);  
    return workbook; 
} 

//reading worksbooks into bytearray and addign to in memory zip files 
public static ByteArrayOutputStream zipWorkbooks(
    List<XSSFWorkbook> workbooks) throws IOException { 

    int workBookIndex = 1; 
    ByteArrayOutputStream byteOutputStream = null; 
    FileOutputStream outputStream = new FileOutputStream("Reports"); 
    ZipOutputStream zipOutputStream = new ZipOutputStream(outputStream); 
    ZipEntry zipEntry = null; 

    for (XSSFWorkbook current : workbooks) { 
     zipEntry = new ZipEntry(REPORT_PREFIX + workBookIndex 
      + EXCEL_EXTENSION); 
     zipOutputStream.putNextEntry(zipEntry); 
     byteOutputStream = new ByteArrayOutputStream(); 
     current.write(byteOutputStream); 
     if (byteOutputStream != null) { 
      zipEntry.setSize(byteOutputStream.size()); 
      zipOutputStream.write(byteOutputStream.toByteArray()); 
      zipOutputStream.closeEntry(); 
     } 
    } 
    zipOutputStream.close(); 
    return byteOutputStream; 
} 

Я не должен писать какие-либо файлы в файловой системе. Пожалуйста, направляйте меня.

ответ

0

Ну, наконец, я понял. Проблема была в моей логике. Я пропустил понимание концепции ByteArrayOutputStram. Я внес изменения в функцию zipWorkbooks, и она отлично работала. Изменения вносятся так:

Публичный статический ByteArrayOutputStream zipWorkbooks ( Список книг) throws IOException { int workBookIndex = 1; ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream(); ByteArrayOutputStream workbookByteArrayStream = null;
ZipOutputStream zipOutputStream = новый ZipOutputStream (byteOutputStream); ZipEntry zipEntry = null;

for (XSSFWorkbook current : workbooks) { 
    zipEntry = new ZipEntry(REPORT_PREFIX + workBookIndex 
     + EXCEL_EXTENSION); 
    zipOutputStream.putNextEntry(zipEntry); 
    workbookByteArrayStream = new ByteArrayOutputStream(); 
    current.write(workbookByteArrayStream);    
    zipEntry.setSize(workbookByteArrayStream.size()); 
    zipOutputStream.write(workbookByteArrayStream.toByteArray()); 
    zipOutputStream.closeEntry();   
    }  
    zipOutputStream.close(); 
    return byteOutputStream; 

}