Java如何生成壓縮文件工具類
Java生成壓縮文件工具類
文件壓縮功能在日常項(xiàng)目中經(jīng)常會(huì)使用到,例如文件太多,需要發(fā)送給用戶,這時(shí)就需要將多個(gè)文件壓縮成一個(gè)壓縮包,然后再通過郵件或其它方式發(fā)送給用戶;
在這里給大家提供一種生成zip文件壓縮工具類,并附帶測(cè)試代碼。
測(cè)試代碼目錄結(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());
}
}
}
}
測(cè)試代碼
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() {
// 源文件存儲(chǔ)路徑
String srcPath = this.getClass().getClassLoader().getResource("").getPath();
// 壓縮包存儲(chǔ)路徑
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);
}
}
}
測(cè)試結(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ì),對(duì)大家的學(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)知識(shí)2023-04-04
Mybatis實(shí)現(xiàn)分包定義數(shù)據(jù)庫的原理與過程
這篇文章主要給大家介紹了關(guān)于Mybatis實(shí)現(xiàn)分包定義數(shù)據(jù)庫的原理與過程,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-01-01
SpringBoot敏感數(shù)據(jù)脫敏的處理方式
在Spring Boot中處理敏感數(shù)據(jù)脫敏,可以通過以下幾種方式實(shí)現(xiàn),確保敏感信息在接口返回、日志輸出、數(shù)據(jù)庫存儲(chǔ)等環(huán)節(jié)得到保護(hù),文中通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下2025-03-03
SpringBoot項(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ì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-03-03
springboot+HttpInvoke?實(shí)現(xiàn)RPC調(diào)用的方法
RPC框架大家或多或少都用過,出自于阿里系的就有dubbo,HSF,sofaRPC等,今天通過本文給大家介紹springboot+HttpInvoke?實(shí)現(xiàn)RPC調(diào)用的方法,感興趣的朋友一起看看吧2022-03-03

