Java实现导出ZIP压缩包的方法
最近接触到一个需求要求压缩导出文件,于是乎便要致力于研究一下工具类啦,故也诞生了此篇文章。
下面代码中,溪源也将import导入的依赖也贴出来了,避免大家引入错误。
importorg.apache.commons.io.FileUtils;
importorg.apache.commons.io.IOUtils;
importjavax.servlet.http.HttpServletResponse;
importjava.io.*;
importjava.text.SimpleDateFormat;
importjava.util.Date;
importjava.util.zip.ZipEntry;
importjava.util.zip.ZipOutputStream;
/**
*@authorwx
*@date2020/10/295:19下午
*/
publicclassFileZipUtil{
privatestaticvoidhandlerFile(ZipOutputStreamzip,Filefile,Stringdir)throwsException{
//如果当前的是文件夹,则进行进一步处理
if(file.isDirectory()){
//得到文件列表信息
File[]fileArray=file.listFiles();
if(fileArray==null){
return;
}
//将文件夹添加到下一级打包目录
zip.putNextEntry(newZipEntry(dir+"/"));
dir=dir.length()==0?"":dir+"/";
//递归将文件夹中的文件打包
for(Filef:fileArray){
handlerFile(zip,f,dir+f.getName());
}
}else{
//当前的是文件,打包处理
//文件输入流
BufferedInputStreambis=newBufferedInputStream(newFileInputStream(file));
ZipEntryentry=newZipEntry(dir);
zip.putNextEntry(entry);
zip.write(FileUtils.readFileToByteArray(file));
IOUtils.closeQuietly(bis);
zip.flush();
zip.closeEntry();
}
}
privatestaticbyte[]createZip(StringsourceFilePath)throwsException{
ByteArrayOutputStreamoutputStream=newByteArrayOutputStream();
ZipOutputStreamzip=newZipOutputStream(outputStream);
//将目标文件打包成zip导出
Filefile=newFile(sourceFilePath);
handlerFile(zip,file,"");
IOUtils.closeQuietly(zip);
returnoutputStream.toByteArray();
}
publicstaticvoidexportZip(HttpServletResponseresponse,StringsourceFilePath){
//文件名以时间戳作为前缀
SimpleDateFormatsdf=newSimpleDateFormat("yyyyMMddHHmmss");
StringfilePrefix=sdf.format(newDate());
StringdownloadName=filePrefix+".zip";
//将文件进行打包下载
try{
OutputStreamout=response.getOutputStream();
//接收压缩包字节
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(Exceptione){
e.printStackTrace();
}
}
}
客户端调用方法:
@GetMapping("/exportFile")
publicResultexportFile(HttpServletResponseresponse){
//第二个参数为:要压缩文件的地址
FileZipUtil.exportZip(response,"/Users/Downloads");
}
到此这篇关于Java实现导出ZIP压缩包的方法的文章就介绍到这了,更多相关Java导出ZIP压缩包内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!