java根据文件地址打包下载zip
根据文件路径集合打包下载
说明
1.声明创建压缩文件
2.创建压缩文件输出流
3.将需要打包的文件集合获取到
4.将需要打包的文件写入压缩包
5.输出压缩文件
导包
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
核心工具代码
/**
*
* @param urlList 被压缩文件路径集合
*/
public static void doZip(HttpServletResponse response, List<String> urlList) {
//根据需要压缩的文件的路径(地址),将文件路径集合装换成File文件集合
List<File> fileList = new ArrayList<File>();
for (String fileUrl : urlList) {
File file = new File(fileUrl);
fileList.add(file);
}
//设置头文件,声明一个zip文件,随机一个文件名称
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition", "attachment; filename=" + System.nanoTime() + ".zip");
//创建一个压缩文件输出流ZipOutputStream,传入设置头文件声明的zip
ZipOutputStream zipOutputStream = null;
try {
zipOutputStream = new ZipOutputStream(response.getOutputStream());
//打包文件
for (File file : fileList) {
zipOutputStream.putNextEntry(new ZipEntry("自定义被压缩文件名称" + file.getName()));
//创建被压缩文件输出流
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[1024];
int r = 0;
while ((r = fis.read(buffer)) != -1) {
//写入压缩文件
zipOutputStream.write(buffer, 0, r);
}
//关闭输出流
fis.close();
}
//刷新缓冲区,写入文件
zipOutputStream.flush();
//关闭输出流
zipOutputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}