JAVA 实现多文件压缩下载<>
本文章主要实现多文件在服务器进行文件压缩!!!
后续下载将在下一篇文章进行更新,请持续关注
文件路径图
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
//1.一般需要加入的jar包:
// commons.fileupload-1.2.1.jar和commons.io-1.4.0.jar,点击下载jar包
/*
https://eurecode.blog.csdn.net/article/details/72772502?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.
pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param
*/
public class download {
// public String downloadFilesTest(HttpServletRequest request,HttpServletResponse res) throws IOException {
public static void main(String[] args) throws IOException {
downloadFilesTest();
}
public static String downloadFilesTest() throws IOException {
try {
//模拟多一个文件,用于测试多文件批量下载
String targetPath = "E:/upload/2.jpg";
String targetPath1 = "E:/upload/1.jpg";
//模拟文件路径下再添加个文件夹,验证穷举
String targetPath2 = "E:/upload/test";
//方法1-3:将附件中多个文件进行压缩,批量打包下载文件
//创建压缩文件需要的空的zip包
String zipBasePath = "E:/upload/zip";
String zipName = "temp.zip";
String zipFilePath = zipBasePath + File.separator + zipName;
//创建需要下载的文件路径的集合
List<String> filePaths = new ArrayList<>();
filePaths.add(targetPath);
filePaths.add(targetPath1);
filePaths.add(targetPath2);
//压缩文件
File zip = new File(zipFilePath);
if (!zip.exists()) {
zip.createNewFile();
}
//创建zip文件输出流
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zip));
zipFile(zipBasePath, zipName, zipFilePath, filePaths, zos);
zos.close();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 压缩文件
*
* @param zipBasePath 临时压缩文件基础路径
* @param zipName 临时压缩文件名称
* @param zipFilePath 临时压缩文件完整路径
* @param filePaths 需要压缩的文件路径集合
* @throws IOException
*/
private static String zipFile(String zipBasePath, String zipName, String zipFilePath, List<String> filePaths, ZipOutputStream zos) throws IOException {
//循环读取文件路径集合,获取每一个文件的路径
for (String filePath : filePaths) {
File inputFile = new File(filePath); //根据文件路径创建文件
if (inputFile.exists()) { //判断文件是否存在
if (inputFile.isFile()) { //判断是否属于文件,还是文件夹
//创建输入流读取文件
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(inputFile));
//将文件写入zip内,即将文件进行打包
zos.putNextEntry(new ZipEntry(inputFile.getName()));
//写入文件的方法,同上
int size = 0;
byte[] buffer = new byte[1024]; //设置读取数据缓存大小
while ((size = bis.read(buffer)) > 0) {
zos.write(buffer, 0, size);
}
//关闭输入输出流
zos.closeEntry();
bis.close();
} else { //如果是文件夹,则使用穷举的方法获取文件,写入zip
try {
File[] files = inputFile.listFiles();
List<String> filePathsTem = new ArrayList<String>();
for (File fileTem : files) {
filePathsTem.add(fileTem.toString());
}
return zipFile(zipBasePath, zipName, zipFilePath, filePathsTem, zos);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
return null;
}
}