Java如何生成壓縮文件工具類
Java生成壓縮文件工具類
文件壓縮功能在日常項(xiàng)目中經(jīng)常會(huì)使用到,例如文件太多,需要發(fā)送給用戶,這時(shí)就需要將多個(gè)文件壓縮成一個(gè)壓縮包,然后再通過郵件或其它方式發(fā)送給用戶;
在這里給大家提供一種生成zip文件壓縮工具類,并附帶測試代碼。
測試代碼目錄結(jié)構(gòu)
文件壓縮核心工具類
主要有三個(gè)入?yún)ⅲ?/strong>
List fileList
:存放所有壓縮源文件的集合File zipFile
:壓縮后的文件Map<String, String> myMap
:key-文件壓縮前名稱,value-文件壓縮后在壓縮包中的名稱
package com.bbu.utils; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.List; import java.util.Map; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; /** * 文件壓縮工具類 * * @author code_now */ public class ZipUtils { /** * 生成壓縮文件 * @param fileList 存放所有壓縮源文件 * @param zipFile 壓縮后文件 * @param myMap key-文件壓縮前名稱,value-文件壓縮后在壓縮包中的名稱 * @throws Exception */ public static void createFileZip(List<File> fileList, File zipFile, Map<String, String> myMap) throws Exception{ if(fileList.size()>0){ byte[] buf = new byte[1024]; try { ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFile)); for(File file:fileList){ FileInputStream in = new FileInputStream(file); out.putNextEntry(new ZipEntry((String) myMap.get(file.getName()))); int len; while ((len = in.read(buf)) > 0) { out.write(buf, 0, len); } out.closeEntry(); in.close(); file.delete();// 寫進(jìn)壓縮文件后,刪除臨時(shí)目錄中的源文件 } out.close(); } catch (IOException e) { throw new Exception("文件壓縮失??!" + e.getMessage()); } } } }
測試代碼
package com.bbu.test; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Test; import com.bbu.utils.ZipUtils; public class TestCreateZip { Log logger = LogFactory.getLog(getClass()); @Test public void createZipTest() { // 源文件存儲路徑 String srcPath = this.getClass().getClassLoader().getResource("").getPath(); // 壓縮包存儲路徑 String desPath = "D:/zipfile/"; // 用于臨時(shí)存放所有的壓縮文件 List<File> fileList = new ArrayList<File>(); // key-文件壓縮前名稱,value-文件壓縮后在壓縮包中的名稱 Map<String,String> myMpa = new HashMap<String,String>(); // 放入文件test.pdf String testPdf = srcPath + "test.pdf"; File testPdfFile =new File(testPdf); myMpa.put(testPdfFile.getName(), "newName.pdf"); fileList.add(testPdfFile); // 放入文件test.docx String testDocx = srcPath + "test.docx"; File testDocxFile =new File(testDocx); myMpa.put(testDocxFile.getName(), "newName.docx"); fileList.add(testDocxFile); // 生成壓縮包zip文件 File zipFile = new File(desPath + File.separator+System.currentTimeMillis()+".zip"); logger.info(zipFile);// 打印壓縮包文件全路徑 try { // 調(diào)用壓縮工具進(jìn)行壓縮 ZipUtils.createFileZip(fileList, zipFile, myMpa); logger.info("壓縮成功!"); } catch (Exception e) { logger.info("壓縮失??!", e); } } }
測試結(jié)果
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java-web中利用RSA進(jìn)行加密解密操作的方法示例
這篇文章主要給大家介紹了關(guān)于在Java-web中利用RSA進(jìn)行加密解密操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08使用Spring的ApplicationEvent實(shí)現(xiàn)本地事件驅(qū)動(dòng)的實(shí)現(xiàn)方法
本文介紹了如何使用Spring的ApplicationEvent實(shí)現(xiàn)本地事件驅(qū)動(dòng),通過自定義事件和監(jiān)聽器,實(shí)現(xiàn)模塊之間的松耦合,提升代碼的可維護(hù)性和擴(kuò)展性。同時(shí)還介紹了異步事件和事件傳遞的相關(guān)知識2023-04-04Mybatis實(shí)現(xiàn)分包定義數(shù)據(jù)庫的原理與過程
這篇文章主要給大家介紹了關(guān)于Mybatis實(shí)現(xiàn)分包定義數(shù)據(jù)庫的原理與過程,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-01-01SpringBoot敏感數(shù)據(jù)脫敏的處理方式
在Spring Boot中處理敏感數(shù)據(jù)脫敏,可以通過以下幾種方式實(shí)現(xiàn),確保敏感信息在接口返回、日志輸出、數(shù)據(jù)庫存儲等環(huán)節(jié)得到保護(hù),文中通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下2025-03-03SpringBoot項(xiàng)目實(shí)戰(zhàn)之?dāng)?shù)據(jù)交互篇
這篇文章主要給大家介紹了關(guān)于SpringBoot項(xiàng)目實(shí)戰(zhàn)之?dāng)?shù)據(jù)交互篇的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-03-03springboot+HttpInvoke?實(shí)現(xiàn)RPC調(diào)用的方法
RPC框架大家或多或少都用過,出自于阿里系的就有dubbo,HSF,sofaRPC等,今天通過本文給大家介紹springboot+HttpInvoke?實(shí)現(xiàn)RPC調(diào)用的方法,感興趣的朋友一起看看吧2022-03-03