XSSFWorkbook對象 進行zip打包時 用write資源流自動關閉處理辦法


XSSFWorkbook對象的write方法內會將傳入的資源流自動關閉 導致下載excel失敗

錯誤代碼

    OutputStream out = response.getOutputStream(); 
    ZipOutputStream zos = new ZipOutputStream(out);
    XSSFWorkbook workbook = new XSSFWorkbook();
    // 將文件寫入zip內,即將文件進行打包
    zos.putNextEntry(new ZipEntry(fileName + "(" + UUID.randomUUID() + ")." + typeName));

    // 此處將自動關閉zos資源
    workbook.wirte(zos);

解決方法: 將XSSFWorkbook轉換成ByteArrayOutputStream,用ByteArrayOutputStream對象將流寫入zip對象中

    OutputStream out = response.getOutputStream(); 
    ZipOutputStream zos = new ZipOutputStream(out);
    XSSFWorkbook workbook = new XSSFWorkbook();
    // 將文件寫入zip內,即將文件進行打包
    zos.putNextEntry(new ZipEntry(fileName + "(" + UUID.randomUUID() + ")." + typeName));
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    workbook.write(bos);
    bos.writeTo(zos);
    zos.closeEntry();

    // 當所有文件打包完成后關閉zos資源
    zos.close();


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM