java導出多個xml文件的壓縮zip

代碼:

		// 設置響應頭response.setCharacterEncoding("UTF-8");//設置響應的字符編碼為UTF-8response.setContentType("application/octet-stream");//設置響應的內容類型為二進制流,通常用于文件下載。response.setHeader("Content-Disposition", "attachment; filename=test.zip");//設置響應頭中的Content-Disposition字段,告訴瀏覽器將響應內容作為附件處理,并指定下載文件的名稱為test.zip。//創建xml文件1Document document = DocumentHelper.createDocument();Element root = document.addElement("root");Element test = root.addElement("test");test.addAttribute("name","淫龍公子");test.addAttribute("age","38");test.addAttribute("jjMaxLength","6cm");Element test1 = root.addElement("test");test1.addAttribute("name","yi龍公子");test1.addAttribute("age","66");test1.addAttribute("jjMaxLength","7cm");Element test2 = root.addElement("test");test2.addAttribute("name","王有");test2.addAttribute("age","77");test2.addAttribute("jjMaxLength","1cm");//創建xml文件2Document document1 = DocumentHelper.createDocument();Element root1 = document1.addElement("root");Element test11 = root1.addElement("test");test11.addAttribute("name","淫龍公子");test11.addAttribute("age","38");test11.addAttribute("jjMaxLength","6cm");Element test12 = root1.addElement("test");test12.addAttribute("name","yi龍公子");test12.addAttribute("age","66");test12.addAttribute("jjMaxLength","7cm");Element test13 = root1.addElement("test");test13.addAttribute("name","王有");test13.addAttribute("age","77");test13.addAttribute("jjMaxLength","1cm");//創建xml文件3Document document2 = DocumentHelper.createDocument();Element root2 = document2.addElement("root");Element test21 = root2.addElement("test");test21.addAttribute("name","淫龍公子");test21.addAttribute("age","38");test21.addAttribute("jjMaxLength","6cm");Element test22 = root2.addElement("test");test22.addAttribute("name","yi龍公子");test22.addAttribute("age","66");test22.addAttribute("jjMaxLength","7cm");Element test23 = root2.addElement("test");test23.addAttribute("name","王有");test23.addAttribute("age","77");test23.addAttribute("jjMaxLength","1cm");// 將XML轉成字符串,后面能用工具類將字符串轉成流String asXML = document.asXML();String asXML1 = document1.asXML();String asXML2 = document2.asXML();ZipOutputStream out = null;try {out = new ZipOutputStream(response.getOutputStream());//writeToZip:將xml流寫到zip輸出流中writeToZip(out,asXML,"test1.xml");writeToZip(out,asXML1,"test2.xml");writeToZip(out,asXML2,"test3.xml");out.flush();out.close();} catch (Exception e) {e.printStackTrace();}finally {if (out != null){try {out.close();} catch (IOException e) {e.printStackTrace();}}}

writeToZip方法:

private void writeToZip(ZipOutputStream out,String xmlContent,String fileName) throws IOException {int len =0;byte[] buffer = new byte[1024];InputStream is = IOUtils.toInputStream(xmlContent, "utf-8");out.putNextEntry(new ZipEntry(fileName));while ((len = is.read(buffer)) >0){out.write(buffer,0,len);}out.closeEntry();is.close();}

注意:前后端分離項目中如果前端有響應攔截器,我們需要再做處理,例如vue項目的下載方法:

// 通用下載方法
export function download(url, params, filename, config) {downloadLoadingInstance = Loading.service({ text: "正在下載數據,請稍候", spinner: "el-icon-loading", background: "rgba(0, 0, 0, 0.7)", })return service.post(url, params, {transformRequest: [(params) => { return tansParams(params) }],headers: { 'Content-Type': 'application/x-www-form-urlencoded' },responseType: 'blob',...config}).then(async (data) => {const isBlob = blobValidate(data);if (isBlob) {const blob = new Blob([data])saveAs(blob, filename)} else {const resText = await data.text();const rspObj = JSON.parse(resText);const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']Message.error(errMsg);}downloadLoadingInstance.close();}).catch((r) => {console.error(r)Message.error('下載文件出現錯誤,請聯系管理員!')downloadLoadingInstance.close();})
}

附加(導出xml文件):

//導出xml文件// 設置響應頭response.setCharacterEncoding("UTF-8");response.setContentType("application/octet-stream");response.setHeader("Content-Disposition", "attachment; filename=test.xml");//創建xml文件Document document = DocumentHelper.createDocument();Element root = document.addElement("root");Element test = root.addElement("test");test.addAttribute("name","淫龍公子");test.addAttribute("age","38");test.addAttribute("jjMaxLength","6cm");Element test1 = root.addElement("test");test1.addAttribute("name","yi龍公子");test1.addAttribute("age","66");test1.addAttribute("jjMaxLength","7cm");Element test2 = root.addElement("test");test2.addAttribute("name","王有");test2.addAttribute("age","77");test2.addAttribute("jjMaxLength","1cm");try {OutputStream outputStream = response.getOutputStream();OutputFormat format = OutputFormat.createPrettyPrint();XMLWriter writer = new XMLWriter(outputStream, format);writer.write(document);writer.close();outputStream.flush();outputStream.close();} catch (FileNotFoundException | UnsupportedEncodingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}

用到的jar包:

<!-- xml包 --><dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>1.1</version></dependency>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/719206.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/719206.shtml
英文地址,請注明出處:http://en.pswp.cn/news/719206.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

解釋一下前端框架中的虛擬DOM(virtual DOM)和實際DOM(real DOM)之間的關系。

聚沙成塔每天進步一點點 ? 專欄簡介 前端入門之旅&#xff1a;探索Web開發的奇妙世界 歡迎來到前端入門之旅&#xff01;感興趣的可以訂閱本專欄哦&#xff01;這個專欄是為那些對Web開發感興趣、剛剛踏入前端領域的朋友們量身打造的。無論你是完全的新手還是有一些基礎的開發…

leetcode日記(36)全排列

想思路想了很久……思路對了應該會很好做。 我的思路是這樣的&#xff1a;只變化前n個數字&#xff0c;不斷增加n&#xff0c;由2到nums.size()&#xff0c;使用遞歸直到得到所有結果 代碼如下&#xff1a; class Solution { public:vector<vector<int>> permut…

正信法律:借款糾紛的民事起訴狀怎么寫

在借款糾紛中&#xff0c;當協商無果時&#xff0c;訴諸法律成為債權人追回債務的有效途徑。而民事起訴狀作為啟動訴訟程序的法律文書&#xff0c;其撰寫質量直接關系到案件的受理與判決。本文旨在簡明扼要地闡述如何撰寫一份規范的借款糾紛民事起訴狀。 起訴狀需包含以下幾個關…

阿克曼轉向車型導航末段位姿調整控制

1目標 分析RPP算法時控制器算法學習1-RPP受控純追蹤算法發現,在終點時如果角度還有較大偏差,該算法無法進行很好的調整,故開始嘗試在末端接近目標點時,用自己的控制算法去調整位姿,姑且命名為TEA算法(Target-End-Adjust Algorithm for Ackermann) 2控制思路 step1. 將…

【百度】B端數據中臺組_大數據研發工程師(J68899)

北京市技術3人2023-12-14 工作職責&#xff1a; 負責百家號和Feed相關大數據的基礎建設負責數倉引擎、Spark底層的優化和基礎建設為百度系APP相關業務分析及策略優化提供大數據支持參與百度系APP日志數據架構開發和APP端性能分析平臺建設 職責要求&#xff1a; 本科及以上學…

C# Onnx segment-anything 分割萬物 一鍵摳圖

目錄 介紹 效果 模型信息 sam_vit_b_decoder.onnx sam_vit_b_encoder.onnx 項目 代碼 下載 C# Onnx segment-anything 分割萬物 一鍵摳圖 介紹 github地址&#xff1a;https://github.com/facebookresearch/segment-anything The repository provides code for runn…

設計模式(十二)享元模式

請直接看原文: 原文鏈接:設計模式&#xff08;十二&#xff09;享元模式-CSDN博客 -------------------------------------------------------------------------------------------------------------------------------- 享元模式定義 享元模式是結構型設計模式的一種&am…

Kubernetes-1

學習Kubernetes第一天 k8s-11、什么是Kubernetes2、配置Kubernetes2.1、準備三臺全新的虛擬機2.2、關閉防火墻和SElinux2.3、修改主機名2.4、升級操作系統(三臺一起操作)2.5、配置主機hosts文件&#xff0c;相互之間通過主機名互相訪問2.6、配置master和node之間的免密通道2.7、…

KMP算法和Manacher算法

KMP算法 KMP算法解決的問題 KMP算法用來解決字符串匹配問題: 找到長串中短串出現的位置. KMP算法思路 暴力比較與KMP的區別 暴力匹配: 對長串的每個位,都從頭開始匹配短串的所有位. KMP算法: 將短字符串前后相同的部分存儲在 n e x t next next數組里,讓之前匹配過的信息指…

我的單片機入門之旅

我的單片機入門之旅 前言 單片機作為現代電子技術的重要組成部分&#xff0c;廣泛應用于各個領域。而作為一個初學者&#xff0c;我對單片機一無所知。但是&#xff0c;通過不斷的學習和實踐&#xff0c;我逐漸掌握了單片機的基本概念和使用方法。在我的單片機入門之旅中&…

【每日前端面經】2024-03-03

題目來源: 牛客 說說你對Vue3的理解&#xff1f; Vue2面對對象編程&#xff0c;Vue3函數時編程對TS支持的更好選項式API替代組合式API響應式原理由Object.defineProperty變為Proxy支持template中存在多個根節點重寫虛擬DOM增加setup修飾符支持tree-shaking&#xff0c;減小體…

代碼隨想錄算法訓練營(動態規劃10,11 股票問題)| 121. 買賣股票的最佳時機 122.買賣股票的最佳時機II

動態規劃10 動態規劃5步曲&#xff0c;個人感覺應該加一步狀態分析 狀態分析&#xff1a; 列出所有的狀態&#xff0c;將狀態歸納后定義dp數組狀態轉移&#xff0c;狀態怎么轉移也就是遞推公式是什么 買賣股票的動規五部曲分析如下&#xff1a; 1 確定dp數組&#xff08;d…

pytorch中的可學習查找表實現之nn.Embedding

假設我們需要一個查找表&#xff08;Lookup Table&#xff09;&#xff0c;我們可以根據索引數字快速定位查找表中某個具體位置并讀取出來。最簡單的方法&#xff0c;可以通過一個二維數組或者二維list來實現。但如果我希望查找表的值可以通過梯度反向傳播來修改&#xff0c;那…

上傳項目的全部依賴到maven私有倉庫-nexus

背景 項目之前的私有倉庫不能使用了&#xff0c;本地倉庫可以&#xff0c;但是一旦clean就沒了&#xff0c;所以在本地有依賴的時候可以自己搭建一個maven私有倉庫然后將依賴全部上傳上去 搭建&#xff1a;使用docker-compose方式搭建 docker-compose文件 version: "3…

C語言入門到精通之練習47:一個偶數總能表示為兩個素數之和。

題目&#xff1a;一個偶數總能表示為兩個素數之和。 程序分析&#xff1a;我去&#xff0c;這是什么題目&#xff0c;要我證明這個問題嗎&#xff1f;真不知道怎么證明。那就把一個偶數串聯成兩個素數吧。 實例 #include<stdio.h> #include<stdlib.h> int Isprime…

Python算法100例-3.1 回文數

完整源代碼項目地址&#xff0c;關注博主私信源代碼后可獲取 1.問題描述2.問題分析3.算法設計4.確定程序框架5.完整的程序6.問題拓展7.巧用字符串技巧 1&#xff0e;問題描述 打印所有不超過n&#xff08;取n<256&#xff09;的其平方具有對稱性質的數&#xff08;也稱回…

在國內如何申請US,visa卡?

隨著跨境與AI的發展大家對美國虛擬卡的需求也越來越多&#xff0c;比如說亞馬遜、ebay、Etsy、ChatGPTPLUS、midjourney、POE等等軟件以及海淘的需要&#xff0c;所以我們需要用到美國虛擬卡的場景就越來越多 如何獲得一張US 虛擬信用卡&#xff1f; 方法很簡單&#xff0c;點…

一線大廠軟件測試面試題及答案解析,2024最強版...

【軟件測試面試突擊班】2024吃透軟件測試面試最全八股文攻略教程&#xff0c;一周學完讓你面試通過率提高90%&#xff01;&#xff08;自動化測試&#xff09; 1、什么是兼容性測試?兼容性測試側重哪些方面? 參考答案: 兼容測試主要是檢查軟件在不同的硬件平臺、軟件平臺上…

CNAN知識圖譜輔助推薦系統

CNAN知識圖譜輔助推薦系統 文章介紹了一個基于KG的推薦系統模型&#xff0c;代碼也已開源&#xff0c;可以看出主要follow了KGNN-LS 。算法流程大致如下&#xff1a; 1. 算法介紹 算法除去attention機制外&#xff0c;主要的思想在于&#xff1a;user由交互過的item來表示、i…

OpenShift AI - 部署并使用 LLM 模型

《OpenShift / RHEL / DevSecOps 匯總目錄》 說明&#xff1a;本文已經在 OpenShift 4.15 RHODS 2.7.0 的環境中驗證 文章目錄 安裝 OpenShift AI 環境安裝 Minio 對象存儲軟件配置 Single Model Serving 運行環境創建項目和 Workbench準備模型和配置 Model Server訪問 LLM 模…