java實(shí)現(xiàn)一次性壓縮多個(gè)文件到zip中的方法示例
本文實(shí)例講述了java實(shí)現(xiàn)一次性壓縮多個(gè)文件到zip中的方法。分享給大家供大家參考,具體如下:
1.需要引入包:
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; import org.springframework.util.StringUtils;
2.代碼
/** * @Title: compress * @Description: TODO * @param filePaths 需要壓縮的文件地址列表(絕對(duì)路徑) * @param zipFilePath 需要壓縮到哪個(gè)zip文件(無需創(chuàng)建這樣一個(gè)zip,只需要指定一個(gè)全路徑) * @param keepDirStructure 壓縮后目錄是否保持原目錄結(jié)構(gòu) * @throws IOException * @return int 壓縮成功的文件個(gè)數(shù) */ public static int compress(List<String> filePaths, String zipFilePath,Boolean keepDirStructure) throws IOException{ byte[] buf = new byte[1024]; File zipFile = new File(zipFilePath); //zip文件不存在,則創(chuàng)建文件,用于壓縮 if(!zipFile.exists()) zipFile.createNewFile(); int fileCount = 0;//記錄壓縮了幾個(gè)文件? try { ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile)); for(int i = 0; i < filePaths.size(); i++){ String relativePath = filePaths.get(i); if(StringUtils.isEmpty(relativePath)){ continue; } File sourceFile = new File(relativePath);//絕對(duì)路徑找到file if(sourceFile == null || !sourceFile.exists()){ continue; } FileInputStream fis = new FileInputStream(sourceFile); if(keepDirStructure!=null && keepDirStructure){ //保持目錄結(jié)構(gòu) zos.putNextEntry(new ZipEntry(relativePath)); }else{ //直接放到壓縮包的根目錄 zos.putNextEntry(new ZipEntry(sourceFile.getName())); } //System.out.println("壓縮當(dāng)前文件:"+sourceFile.getName()); int len; while((len = fis.read(buf)) > 0){ zos.write(buf, 0, len); } zos.closeEntry(); fis.close(); fileCount++; } zos.close(); //System.out.println("壓縮完成"); } catch (Exception e) { e.printStackTrace(); } return fileCount; }
3.測試
public static void main(String[] args) throws IOException { List<String> sourceFilePaths = new ArrayList<String>(); sourceFilePaths.add("d:/test/C08065.jpg"); sourceFilePaths.add("d:/test/新建文件夾/C08984.jpg"); sourceFilePaths.add("d:/test/找不到我.jpg");//試一個(gè)找不到的文件 //指定打包到哪個(gè)zip(絕對(duì)路徑) String zipTempFilePath = "D:/test/test.zip"; //調(diào)用壓縮 int s = compress(sourceFilePaths, zipTempFilePath,false); System.out.println("成功壓縮"+s+"個(gè)文件"); }
更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java文件與目錄操作技巧匯總》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》和《Java緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
詳解Spring Boot工程集成全局唯一ID生成器 UidGenerator的操作步驟
本文就在項(xiàng)目中來集成 UidGenerator這一工程來作為項(xiàng)目的全局唯一 ID生成器。接下來通過實(shí)例代碼給大家詳解詳解Spring Boot工程集成全局唯一ID生成器 UidGenerator的操作步驟,感興趣的朋友一起看看吧2018-10-10Java從ftp服務(wù)器上傳與下載文件的實(shí)現(xiàn)
這篇文章主要給大家介紹了關(guān)于Java從ftp服務(wù)器上傳與下載文件的實(shí)現(xiàn)方法,最近項(xiàng)目中需要實(shí)現(xiàn)將文件先存放到ftp上,需要的時(shí)候再從ftp上下載,做的過程中碰到了問題,所以這里總結(jié)下,需要的朋友可以參考下2023-08-08Spring中的@RestControllerAdvice注解使用解析
這篇文章主要介紹了Spring中的@RestControllerAdvice注解使用解析,@RestControllerAdvice?是?Spring?框架中一個(gè)用于統(tǒng)一處理控制器異常和返回結(jié)果的注解,它可以被用來定義全局異常處理程序和全局響應(yīng)結(jié)果處理程序,需要的朋友可以參考下2024-01-01SpringMVC HttpMessageConverter消息轉(zhuǎn)換器
??HttpMessageConverter???,報(bào)文信息轉(zhuǎn)換器,將請求報(bào)文轉(zhuǎn)換為Java對(duì)象,或?qū)ava對(duì)象轉(zhuǎn)換為響應(yīng)報(bào)文。???HttpMessageConverter???提供了兩個(gè)注解和兩個(gè)類型:??@RequestBody,@ResponseBody???,??RequestEntity,ResponseEntity??2023-04-04Springboot跨域CORS處理實(shí)現(xiàn)原理
這篇文章主要介紹了Springboot跨域CORS處理實(shí)現(xiàn)原理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04kafka 啟動(dòng)報(bào)錯(cuò) missingTopicsFatal is true的解決
這篇文章主要介紹了kafka 啟動(dòng)報(bào)錯(cuò) missingTopicsFatal is true的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07spring boot 默認(rèn)異常處理的實(shí)現(xiàn)
這篇文章主要介紹了spring boot 默認(rèn)異常處理的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04