JAVA 实现多文件压缩下载 1

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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值