Java實現(xiàn)導出ZIP壓縮包的方法
更新時間:2020年11月02日 11:37:30 作者:溪~源
這篇文章主要介紹了Java實現(xiàn)導出ZIP壓縮包的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
最近接觸到一個需求要求壓縮導出文件,于是乎便要致力于研究一下工具類啦,故也誕生了此篇文章。
下面代碼中,溪源也將import導入的依賴也貼出來了,避免大家引入錯誤。
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* @author wx
* @date 2020/10/29 5:19 下午
*/
public class FileZipUtil {
private static void handlerFile(ZipOutputStream zip, File file, String dir) throws Exception {
//如果當前的是文件夾,則進行進一步處理
if (file.isDirectory()) {
//得到文件列表信息
File[] fileArray = file.listFiles();
if (fileArray == null) {
return;
}
//將文件夾添加到下一級打包目錄
zip.putNextEntry(new ZipEntry(dir + "/"));
dir = dir.length() == 0 ? "" : dir + "/";
//遞歸將文件夾中的文件打包
for (File f : fileArray) {
handlerFile(zip, f, dir + f.getName());
}
} else {
//當前的是文件,打包處理
//文件輸入流
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
ZipEntry entry = new ZipEntry(dir);
zip.putNextEntry(entry);
zip.write(FileUtils.readFileToByteArray(file));
IOUtils.closeQuietly(bis);
zip.flush();
zip.closeEntry();
}
}
private static byte[] createZip(String sourceFilePath) throws Exception{
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ZipOutputStream zip = new ZipOutputStream(outputStream);
//將目標文件打包成zip導出
File file = new File(sourceFilePath);
handlerFile(zip, file,"");
IOUtils.closeQuietly(zip);
return outputStream.toByteArray();
}
public static void exportZip(HttpServletResponse response, String sourceFilePath) {
//文件名以時間戳作為前綴
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
String filePrefix = sdf.format(new Date());
String downloadName = filePrefix + ".zip";
//將文件進行打包下載
try {
OutputStream out = response.getOutputStream();
//接收壓縮包字節(jié)
byte[] data = createZip(sourceFilePath);
response.reset();
response.addHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Expose-Headers", "*");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + downloadName);
response.addHeader("Content-Length", "" + data.length);
response.setContentType("application/octet-stream;charset=UTF-8");
IOUtils.write(data, out);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
客戶端調用方法:
@GetMapping("/exportFile")
public Result exportFile(HttpServletResponse response) {
//第二個參數(shù)為:要壓縮文件的地址
FileZipUtil.exportZip(response, "/Users/Downloads");
}
到此這篇關于Java實現(xiàn)導出ZIP壓縮包的方法的文章就介紹到這了,更多相關Java導出ZIP壓縮包內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java程序中實現(xiàn)調用Python腳本的方法詳解
這篇文章主要介紹了Java程序中實現(xiàn)調用Python腳本的方法,結合實例形式分析了eclipse環(huán)境中使用Java調用Python腳本的相關操作技巧與注意事項,需要的朋友可以參考下2018-03-03
對數(shù)據(jù)進行分頁顯示到table中的實現(xiàn)方法
這篇文章主要介紹了對數(shù)據(jù)進行分頁顯示到table中的實現(xiàn)方法的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-05-05
SpringBoot異常: nested exception is java.lang.NoClassDefFoundE
這篇文章主要介紹了SpringBoot異常: nested exception is java.lang.NoClassDefFoundError: javax/servlet/ServletContext解決方案,說明了錯誤原因和解決方案,需要的朋友可以參考下2021-06-06

