最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java多文件生成并壓縮下載功能(思路詳解)

 更新時間:2022年02月15日 10:11:14   作者:流蘇打  
這篇文章主要介紹了Java多文件生成并壓縮下載,本文給大家分享兩種思路通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

年前一直忙著項目現(xiàn)場實施,沒時間整理,今天終于得空開始整理。

做WMS系統(tǒng)經(jīng)常會遇到導(dǎo)出各種類型的庫存單,此時就可以在后臺將這些整合壓縮到一個壓縮包內(nèi)然后再下載壓縮包,一個接口就可以完成的事。

有兩個思路:

思路一:將生成的多個文件先逐個存到本地一個臨時的文件夾內(nèi)并壓縮,獲取壓縮文件下載,下載完以后刪除該臨時文件夾和內(nèi)部文件 思路二:所有都在內(nèi)存中實現(xiàn),將生成的多個文件的輸出流轉(zhuǎn)換成為byte數(shù)組塞入壓縮包的輸出流中,最后下載該壓縮包

第一個思路雖然操作復(fù)雜,但是卻很容易想到的。

第二個思路,所有文件流都放在內(nèi)存中操作,操作大大的簡便了。本文將要講述的就是此種方式。

controller層:

//思路二:所有都在內(nèi)存中實現(xiàn),將生成的多個文件的輸出流轉(zhuǎn)換成為byte數(shù)組塞入壓縮包的輸出流中,最后下載該壓縮包
    @RequestMapping("/zip/download2")
    public void downloadZip2(String name, HttpServletResponse httpResponse) {
        documentService.downloadReport(name, httpResponse);
    }

service層:

public void downloadReport(String name, HttpServletResponse httpResponse){
 
        //使用EasyExcel生成excel表1
        Map excelOut = exportExcel(name);
        //使用EasyExcel生成excel表2(同上)
        Map excelOut2 = exportExcel2(name);
        //將要壓縮的文件塞到一個list里面
        List<Map> fileList = new ArrayList();
        fileList.add(excelOut);
        fileList.add(excelOut2);
        //壓縮多個文件并下載
        zipFiles(fileList,httpResponse);
    }

要養(yǎng)成一個良好的習(xí)慣,當(dāng)一個方法中的代碼量過于臃腫時候,要抽出來一部分生成一個新的方法來給調(diào)用。

 //生成excel表格導(dǎo)出到本地
    public Map exportExcel(String name) {
        List<User> userList = userDao.queryUsersByName(name);
        try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
            //使用easyExcel導(dǎo)出excel
            String excelFileName = "根據(jù)人名查詢數(shù)據(jù).xlsx";
            ExcelWriter writer = new ExcelWriter(out, ExcelTypeEnum.XLSX, true);
            Sheet sheet = new Sheet(1, 0, User.class);
            //設(shè)置自適應(yīng)寬度
            sheet.setAutoWidth(Boolean.TRUE);
            writer.write(userList, sheet);
            writer.finish();
            Map excelOut = new HashMap();
            excelOut.put("fileName",excelFileName);
            excelOut.put("outByte",out.toByteArray());
            return excelOut;
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        }
        return null;
    }
 //多個文件壓縮成壓縮包并下載
    public void zipFiles(List<Map> fileList,HttpServletResponse httpResponse) {
        try(ZipOutputStream zipOutputStream = new ZipOutputStream(httpResponse.getOutputStream()); OutputStream out =null) {
            //下載壓縮包
            httpResponse.setContentType("application/zip");
            httpResponse.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode("附件.zip", "UTF-8"));
            // 創(chuàng)建 ZipEntry 對象
            for (Map map:fileList){
                ZipEntry zipEntry =  new ZipEntry((String) map.get("fileName"));
                zipOutputStream.putNextEntry(zipEntry);
                zipOutputStream.write((byte[]) map.get("outByte"));
            }
        } catch (IOException e) {
            log.error(e.getMessage(), e);
        }
    }

dao層就是簡單的一個sql語句根據(jù)用戶名稱查詢用戶數(shù)據(jù)

如此便完成了多文件壓縮并下載的功能,如下。

當(dāng)然,思路一雖然復(fù)雜,但是對于新手同學(xué)我還是建議把思路一自己實現(xiàn)一下,其中對于文件IO的一些操作將會讓你更加容易理解并吸收。

到此這篇關(guān)于Java多文件生成并壓縮下載的文章就介紹到這了,更多相關(guān)Java多文件壓縮下載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Spring Data Jpa 模糊查詢的正確用法

    詳解Spring Data Jpa 模糊查詢的正確用法

    本篇文章主要介紹了詳解Spring Data Jpa 模糊查詢的正確用法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • Java超過long類型的數(shù)據(jù)表示方法

    Java超過long類型的數(shù)據(jù)表示方法

    這篇文章主要給大家介紹Java超過long類型的數(shù)據(jù)如何表示,在 Java 中,如果需要表示超過 long 類型范圍的數(shù)據(jù),可以使用 BigInteger 類,BigInteger 是 Java 提供的一個用于處理任意精度整數(shù)的類,它可以表示非常大或非常小的整數(shù),需要的朋友可以參考下
    2023-09-09
  • OpenFeign服務(wù)接口調(diào)用的過程詳解

    OpenFeign服務(wù)接口調(diào)用的過程詳解

    Feign是一個聲明式WebService客戶端。使用Feign能讓編寫Web?Service客戶端更加簡單。它的使用方法是定義一個服務(wù)接口然后在上面添加注解,這篇文章主要介紹了OpenFeign服務(wù)接口調(diào)用,需要的朋友可以參考下
    2022-10-10
  • Java實現(xiàn)打飛機小游戲(附完整源碼)

    Java實現(xiàn)打飛機小游戲(附完整源碼)

    這篇文章主要介紹了Java實現(xiàn)打飛機小游戲(附完整源碼),這里整理了詳細的代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Java缺失區(qū)間的查找方法

    Java缺失區(qū)間的查找方法

    在 Java 的算法世界里,有許多有趣又具有挑戰(zhàn)性的問題等待我們?nèi)ヌ剿?今天,跟著小編一起來深入研究缺失區(qū)間的查找秘籍,文中有詳細的代碼示例供大家參考,需要的朋友可以參考下
    2025-02-02
  • SpringBoot使用JavaMailSender實現(xiàn)發(fā)送郵件

    SpringBoot使用JavaMailSender實現(xiàn)發(fā)送郵件

    JavaMailSender是Spring Framework中的一個接口,用于發(fā)送電子郵件,本文主要為大家詳細介紹了SpringBoot如何使用JavaMailSender實現(xiàn)發(fā)送郵件,需要的可以參考下
    2023-12-12
  • Java實現(xiàn)自動獲取法定節(jié)假日詳細代碼

    Java實現(xiàn)自動獲取法定節(jié)假日詳細代碼

    這篇文章主要給大家介紹了關(guān)于Java實現(xiàn)自動獲取法定節(jié)假日的相關(guān)資料,獲取并處理節(jié)假日數(shù)據(jù)是一個常見需求,特別是在需要安排任務(wù)調(diào)度、假期通知等功能的場景中,需要的朋友可以參考下
    2024-05-05
  • IDEA新UI如何移動類路徑工具欄到頂部

    IDEA新UI如何移動類路徑工具欄到頂部

    文章介紹了IDEA更新新UI后,類路徑工具欄放到底部的問題,并提供了解決方案,此外,還提到了如何關(guān)閉主菜單背景色的方法
    2025-01-01
  • 全面理解java中的異常處理機制

    全面理解java中的異常處理機制

    下面小編就為大家?guī)硪黄胬斫鈐ava中的異常處理機制。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • 2018年java技術(shù)面試題整理

    2018年java技術(shù)面試題整理

    小編為大家整理了2018年最新的關(guān)于java技術(shù)相關(guān)的面試題,以及給出了最簡簡答方式,學(xué)習(xí)下吧。
    2018-02-02

最新評論

海阳市| 丹巴县| 呼玛县| 南阳市| 米脂县| 卓资县| 无为县| 湖州市| 宁乡县| 盐边县| 梁山县| 崇阳县| 栖霞市| 德清县| 平利县| 浮山县| 漾濞| 台安县| 保亭| 麻江县| 衡山县| 安西县| 红河县| 尤溪县| 宕昌县| 芜湖市| 玉门市| 鄯善县| 宿州市| 庆阳市| 资阳市| 密云县| 和顺县| 兰西县| 芜湖县| 祁东县| 甘肃省| 栾川县| 江津市| 双峰县| 中西区|