文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

java工具类 - 实现文件压缩zip及解压缩

2023-10-28 07:05

关注

对hutool工具类进行的封装

依赖

                    cn.hutool            hutool-all            5.8.15            compile        

压缩代码

package com.myrc.web.util;import cn.hutool.core.collection.CollUtil;import cn.hutool.core.util.ZipUtil;import lombok.extern.slf4j.Slf4j;import javax.activation.MimetypesFileTypeMap;import javax.servlet.http.HttpServletResponse;import java.io.*;import java.net.URLEncoder;import java.util.List;@Slf4j@SuppressWarnings("all")public class ZipFileUtils {        public static void generateZip(File targetZipFile, List sourceFiles, boolean dirWithFlag) {        if (CollUtil.isNotEmpty(sourceFiles)) {            File[] fileArr = sourceFiles.toArray(new File[]{});            ZipUtil.zip(targetZipFile, dirWithFlag, fileArr);        }    }        public static void downloadZip(File file, HttpServletResponse response) {        OutputStream toClient = null;        try {            // 以流的形式下载文件。            BufferedInputStream fis = new BufferedInputStream(new FileInputStream(file.getPath()));            byte[] buffer = new byte[fis.available()];            fis.read(buffer);            fis.close();            // 清空response            response.reset();            toClient = new BufferedOutputStream(response.getOutputStream());            response.setCharacterEncoding("UTF-8");            response.setContentType("application/octet-stream");            response.setHeader("Content-Disposition", "attachment;filename=" + file.getName());            toClient.write(buffer);            toClient.flush();        } catch (Exception e) {            log.error("下载zip压缩包过程发生异常:", e);        } finally {            if (toClient != null) {                try {                    toClient.close();                } catch (IOException e) {                    log.error("zip包下载关流失败:", e);                }            }            //删除改临时zip包(此zip包任何时候都不需要保留,因为源文件随时可以再次进行压缩生成zip包)            file.delete();        }    }        public static void downloadAnyFile(File file, HttpServletResponse response) {        FileInputStream fileInputStream = null;        OutputStream outputStream = null;        try {            fileInputStream = new FileInputStream(file);            // 清空response            response.reset();            //防止文件名中文乱码            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(file.getName(),"UTF-8"));            //根据文件动态setContentType            response.setContentType(new MimetypesFileTypeMap().getContentType(file) + ";charset=UTF-8");            outputStream = response.getOutputStream();            byte[] bytes = new byte[2048];            int len;            while ((len = fileInputStream.read(bytes)) > 0) {                outputStream.write(bytes, 0, len);            }        } catch (Exception e) {            e.printStackTrace();        } finally {            if (outputStream != null) {                try {                    outputStream.close();                } catch (IOException e1) {                    e1.printStackTrace();                }            }            if (fileInputStream != null) {                try {                    fileInputStream.close();                } catch (IOException e1) {                    e1.printStackTrace();                }            }        }    }}

FileUtil 工具类补齐

public class FileUtil {      public static List getAllFile(String dirFilePath) {        if (StrUtil.isBlank(dirFilePath))            return null;        return getAllFile(new File(dirFilePath));    }        public static List getAllFile(File dirFile) {        // 如果文件夹不存在或着不是文件夹,则返回 null        if (Objects.isNull(dirFile) || !dirFile.exists() || dirFile.isFile())            return null;        File[] childrenFiles = dirFile.listFiles();        if (Objects.isNull(childrenFiles) || childrenFiles.length == 0)            return null;        List files = new ArrayList<>();        for (File childFile : childrenFiles) {            // 如果是文件,直接添加到结果集合            if (childFile.isFile()) {                files.add(childFile);            }            //以下几行代码取消注释后可以将所有子文件夹里的文件也获取到列表里//            else {//                // 如果是文件夹,则将其内部文件添加进结果集合//                List cFiles = getAllFile(childFile);//                if (Objects.isNull(cFiles) || cFiles.isEmpty()) continue;//                files.addAll(cFiles);//            }        }        return files;    }}    
解压缩

zipUtil是hutool包下的工具类

File unzip = ZipUtil.unzip(zipPath, StandardCharsets.UTF_8); 

使用:

//获取该目录下全部的文件List allFile = FileUtil.getAllFile(configPath);//对目标文件集 压缩ZipFileUtils.generateZip(new File(zipPath),allFile,true);

来源地址:https://blog.csdn.net/qq_43473129/article/details/129119088

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯