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

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

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

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

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

有兩個(gè)思路:

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

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

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

controller層:

//思路二:所有都在內(nèi)存中實(shí)現(xiàn),將生成的多個(gè)文件的輸出流轉(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);
        //將要壓縮的文件塞到一個(gè)list里面
        List<Map> fileList = new ArrayList();
        fileList.add(excelOut);
        fileList.add(excelOut2);
        //壓縮多個(gè)文件并下載
        zipFiles(fileList,httpResponse);
    }

要養(yǎng)成一個(gè)良好的習(xí)慣,當(dāng)一個(gè)方法中的代碼量過于臃腫時(shí)候,要抽出來一部分生成一個(gè)新的方法來給調(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;
    }
 //多個(gè)文件壓縮成壓縮包并下載
    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 對(duì)象
            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層就是簡(jiǎn)單的一個(gè)sql語句根據(jù)用戶名稱查詢用戶數(shù)據(jù)

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

    Java實(shí)現(xiàn)自動(dòng)獲取法定節(jié)假日詳細(xì)代碼

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

    IDEA新UI如何移動(dòng)類路徑工具欄到頂部

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

    全面理解java中的異常處理機(jī)制

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

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

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

最新評(píng)論

宜川县| 扎兰屯市| 广饶县| 商河县| 岗巴县| 岢岚县| 溆浦县| 哈巴河县| 水城县| 夹江县| 汉寿县| 建瓯市| 常德市| 庄浪县| 斗六市| 岳阳市| 旌德县| 阿合奇县| 湘阴县| 绵竹市| 山西省| 叙永县| 彭州市| 康定县| 阿瓦提县| 乌拉特前旗| 古田县| 安顺市| 临武县| 太原市| 新和县| 顺义区| 富川| 富顺县| 泰兴市| 台北市| 长春市| 长治县| 于都县| 云浮市| 怀宁县|