Java使用Apache compress實現(xiàn)文件夾壓縮成Zip包
Apache common提供了很多實用的工具包,下面就說一下如何用compress包來壓縮文件夾。先引入compress,io和lang3這3個工具包:
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.9</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.8</version>
</dependency>
</dependencies>這個方法實現(xiàn)了將文件夾下所有的文件壓縮成zip包,并輸出到文件流中,可以直接寫入到文件或提供給前端下載,工具類如下:
import org.apache.commons.compress.archivers.ArchiveException;
import org.apache.commons.compress.archivers.ArchiveStreamFactory;
import org.apache.commons.compress.archivers.zip.Zip64Mode;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.io.filefilter.TrueFileFilter;
import org.apache.commons.lang3.StringUtils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Collection;
public class ZipUtils {
/**
* 壓縮文件夾下的所有文件
* @param dir 要壓縮的文件夾
* @param outputStream 輸出壓縮后的文件流
* @throws IOException IO異常
* @throws ArchiveException 壓縮異常
*/
public static void zip(File dir, OutputStream outputStream) throws IOException, ArchiveException {
ZipArchiveOutputStream zipOutput = null;
try {
zipOutput = (ZipArchiveOutputStream) new ArchiveStreamFactory()
.createArchiveOutputStream(ArchiveStreamFactory.ZIP, outputStream);
zipOutput.setEncoding("utf-8");
zipOutput.setUseZip64(Zip64Mode.AsNeeded);
Collection<File> files = FileUtils.listFilesAndDirs(dir, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
for (File file : files) {
InputStream in = null;
try {
if (file.getPath().equals(dir.getPath())) {
continue;
}
String relativePath = StringUtils.replace(file.getPath(), dir.getPath() + File.separator, "");
ZipArchiveEntry entry = new ZipArchiveEntry(file, relativePath);
zipOutput.putArchiveEntry(entry);
if (file.isDirectory()) {
zipOutput.closeArchiveEntry();
continue;
}
in = new FileInputStream(file);
IOUtils.copy(in, zipOutput);
zipOutput.closeArchiveEntry();
} finally {
if (in != null) {
IOUtils.closeQuietly(in);
}
}
}
zipOutput.finish();
} finally {
IOUtils.closeQuietly(zipOutput);
}
}
public static void main(String args[]) throws IOException, ArchiveException {
//要壓縮的文件路徑
File dir = new File("C:\\data\\data");
//壓縮后zip包文件路徑
File dest = new File("C:\\data\\test.zip");
OutputStream outputStream = new FileOutputStream(dest);
zip(dir, outputStream);
}
}執(zhí)行main函數(shù)跑測試用例,發(fā)現(xiàn)程序?qū)ir路徑下的所有文件已經(jīng)壓縮并輸出zip包。
到此這篇關(guān)于Java使用Apache compress實現(xiàn)文件夾壓縮成Zip包的文章就介紹到這了,更多相關(guān)Java文件夾壓縮成Zip內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringCloud如何利用Feign訪問外部http請求
這篇文章主要介紹了SpringCloud如何利用Feign訪問外部http請求,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
Spring Security 實現(xiàn)用戶名密碼登錄流程源碼詳解
在服務端的安全管理使用了Spring Security,用戶登錄成功之后,Spring Security幫你把用戶信息保存在Session里,但是具體保存在哪里,要是不深究你可能就不知道,今天小編就帶大家具體了解一下Spring Security實現(xiàn)用戶名密碼登錄的流程2021-11-11
Java 基于UDP協(xié)議實現(xiàn)消息發(fā)送
這篇文章主要介紹了Java 基于UDP協(xié)議實現(xiàn)消息發(fā)送,幫助大家更好的理解和學習Java網(wǎng)絡(luò)編程,感興趣的朋友可以了解下2020-11-11
SpringCloud?Gateway?DispatcherHandler調(diào)用方法詳細介紹
我們第一個關(guān)注的類就是DispatcherHandler,這個類提供的handle()方法,封裝了我們之后所有的handlerMappings,這個DispatcherHandler有點想SpringMVC的DispatchServlet,里面也是封裝了請求和對應的處理方法的關(guān)系2022-10-10
SpringBoot中的6種API請求參數(shù)讀取方式總結(jié)
使用Spring Boot開發(fā)API的時候,讀取請求參數(shù)是服務端編碼中最基本的一項操作,Spring Boot中也提供了多種機制來滿足不同的API設(shè)計要求,通過本文,為大家總結(jié)6種常用的請求參數(shù)讀取方式,需要的朋友可以參考下2024-07-07

