Java压缩工具(zip)

2023-11-06

在这里插入图片描述
压缩包使用说明

public class ZipFileUtils {

    /**
     * web下载打成压缩包的文件--流方式
     *
     * @param response 响应
     * @param fileList 文件列表
     * @param zipName  压缩包名
     */
    public static void downloadZipFiles(HttpServletResponse response, List<File> fileList, String zipName) {
        ZipOutputStream zipOutputStream = null;
        try {
            //设置响应头
            response.reset();
            response.setContentType("application/octet-stream");
            response.setCharacterEncoding("utf-8");
            //设置文件名称
            response.setHeader("Content-Disposition", "attachment;filename=" + zipName);
            zipOutputStream = new ZipOutputStream(response.getOutputStream());
            for (File file : fileList) {
                toZip(zipOutputStream,file);
            }
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        } finally {
            //关闭资源
            if (null != zipOutputStream) {
                try {
                    zipOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * 压缩文件
     *
     * @param zipOutputStream 压缩文件流
     * @param file            待压缩文件
     */
    private static void toZip(ZipOutputStream zipOutputStream, File file) {
        String filename = file.getName();
        BufferedInputStream bis = null;
        try {
            bis = new BufferedInputStream(Files.newInputStream(file.toPath()));
            //设置压缩包内文件的名称
            zipOutputStream.putNextEntry(new ZipEntry(filename));
            int size;
            byte[] buffer = new byte[4096];
            while ((size = bis.read(buffer)) > 0) {
                zipOutputStream.write(buffer, 0, size);
            }
            zipOutputStream.closeEntry();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        } finally {
            //关闭资源
            if (null != bis) {
                try {
                    bis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

public class ExcelWidthStyleStrategy extends AbstractColumnWidthStyleStrategy {

    // 统计setColumnWidth被调用多少次
    private static int count = 0;
    
    @Override
    protected void setColumnWidth(WriteSheetHolder writeSheetHolder, List<WriteCellData<?>> cellDataList, Cell cell, Head head,
                                  Integer relativeRowIndex, Boolean isHead) {
        // 简单设置
        Sheet sheet = writeSheetHolder.getSheet();
        sheet.setColumnWidth(cell.getColumnIndex(), 5000);
//        System.out.println("0000000"+count++);
    }


    //设置excel样式
    public static HorizontalCellStyleStrategy getStyleStrategy() {
        // 头的策略
        WriteCellStyle headWriteCellStyle = new WriteCellStyle();
        // 背景设置为灰色  浅蓝色
        headWriteCellStyle.setFillForegroundColor(IndexedColors.PALE_BLUE.getIndex());
        WriteFont headWriteFont = new WriteFont();
        headWriteFont.setFontHeightInPoints((short) 20);
        //行宽
        // 字体样式
        headWriteFont.setFontName("Frozen");
        headWriteCellStyle.setWriteFont(headWriteFont);
        //自动换行
        headWriteCellStyle.setWrapped(false);
        // 水平对齐方式
        headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
        // 垂直对齐方式
        headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        //锁定表头
        headWriteCellStyle.setLocked(true);

        // 内容的策略
        WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
        // 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND 不然无法显示背景颜色.头默认了 FillPatternType所以可以不指定
//        contentWriteCellStyle.setFillPatternType(FillPatternType.SQUARES);
        // 背景白色
        contentWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
        WriteFont contentWriteFont = new WriteFont();
        // 字体大小
        contentWriteFont.setFontHeightInPoints((short) 12);
        // 字体样式
        contentWriteFont.setFontName("Song");
        contentWriteCellStyle.setWriteFont(contentWriteFont);

        // 这个策略是 头是头的样式 内容是内容的样式 其他的策略可以自己实现
        return new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java压缩工具(zip) 的相关文章

  • 在 Java 中连接和使用 Cassandra

    我已经阅读了一些关于 Cassandra 是什么以及它可以做什么的教程 但我的问题是如何在 Java 中与 Cassandra 交互 教程会很好 如果可能的话 有人可以告诉我是否应该使用 Thrift 还是 Hector 哪一个更好以及为什
  • Spring Batch 多线程 - 如何使每个线程读取唯一的记录?

    这个问题在很多论坛上都被问过很多次了 但我没有看到适合我的答案 我正在尝试在我的 Spring Batch 实现中实现多线程步骤 有一个包含 100k 条记录的临时表 想要在 10 个线程中处理它 每个线程的提交间隔为 300 因此在任何时
  • 为什么 i++ 不是原子的?

    Why is i Java 中不是原子的 为了更深入地了解 Java 我尝试计算线程中循环的执行频率 所以我用了一个 private static int total 0 在主课中 我有两个线程 主题 1 打印System out prin
  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • Spring Data JPA 应用排序、分页以及 where 子句

    我目前正在使用 Spring JPA 并利用此处所述的排序和分页 如何通过Spring data JPA通过排序和可分页查询数据 https stackoverflow com questions 10527124 how to query
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • 禁止的软件包名称:java

    我尝试从数据库名称为 jaane 用户名 Hello 和密码 hello 获取数据 错误 java lang SecurityException Prohibited package name java at java lang Class
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • 为什么HashMap不能保证map的顺序随着时间的推移保持不变

    我在这里阅读有关 Hashmap 和 Hashtable 之间的区别 http javarevisited blogspot sg 2010 10 difference Between hashmap and html http javar
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • 如何在 javadoc 中使用“<”和“>”而不进行格式化?

    如果我写
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • 静态变量的线程安全

    class ABC implements Runnable private static int a private static int b public void run 我有一个如上所述的 Java 类 我有这个类的多个线程 在里面r
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • 如何修复 JNLP 应用程序中的“缺少代码库、权限和应用程序名称清单属性”?

    随着最近的 Java 更新 许多人都遇到了缺少 Java Web Start 应用程序的问题Codebase Permissions and Application name体现属性 尽管有资源可以帮助您完成此任务 但我找不到任何资源综合的
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两
  • Spring Boot @ConfigurationProperties 不从环境中检索属性

    我正在使用 Spring Boot 1 2 1 并尝试创建一个 ConfigurationProperties带有验证的bean 如下所示 package com sampleapp import java net URL import j

随机推荐

  • JAVA多线程服务器,UI实现

    JAVA多线程服务器 UI实现 服务器选择端口启动服务 客户端填入服务器名和端口进行服务器连接 实现功能 多客户端的同时连接 客户端上线通知 点击send按钮或者敲击回车进行发送 消息发送时间显示 客户端与服务器实时通信 可同时发送多条消息
  • 运算放大器设计及应用参讨(三)

    1 请问运放上的 15V 电压不稳定是不是也影响输出波形 问 请问运放上的 15V 电压不稳定是不是也影响输出波形 答 1 电源电压的波动会影响到输出的 但是对于输出能影响到多少 运放中有个参数PSRR 可以体现出来 例如PSRR 80dB
  • 华硕z97不识别m2固态_固态盘M.2、SATA有这样的差别,难怪大家都选“它”

    M 2接口SSD 现在常见的固态硬盘都是M 2或者SATA3接口 那么他们之间的区别是什么呢 今天 小编就以问答的形式 给大家普及下M 2固态硬盘的相关知识 1 什么是M 2接口 M 2是硬盘的一种接口 主要优势就是比传统的SATA3 0接
  • 对随机变量的简单理解

    首先看下官方定义 随机变量是从样本空间投影到实数轴的一个广义的实值函数 对任意一个样本点w 存在唯一的实数X w 与之对应 我画了下图来解释这个定义 当我们需要研究事件发生的概率时 引入随机变量后 对事件概率的研究不再是重点 而是转化为对随
  • 变量名中的反义词

    add remove begin end create destroy insert delete first last get release increment decrement put get up down lock unlock
  • MySql.Data连接数据库mysql

    using MySql Data MySqlClient using MySql Data using System Data using System IO MySqlConnection con new MySqlConnection
  • SVN版本库的分支和Tag

    SVN的branch和tag管理都是通过copy实现的 它并没有独立的branche和tag概念 它仅仅是管理文件的历史 trunk branch tag对于SVN而言都是普通的文件夹 创建分支的svn命令 svn copy http sv
  • python中的linearregression_Python 线性回归(Linear Regression) - 到底什么是 regression?...

    背景 这个 linear Regression 中的 Regression 是什么意思 字面上 Regression 是衰退的意思 线性衰退 相信理解了这个词 对线性回归可能印象深刻些 Regression 到底是什么意思 搜了一番 原来是
  • mongodb的时间差 8小时

    存储在mongodb中的时间是标准时间UTC 0 00 而中国的时区是 8 00 所以实际的显示时间是加了八小时的 取出时间时 需要减去八小时
  • Android 内存泄露分析

    1 内存泄漏简介 内存泄漏是指内存空间使用完毕后无法被释放的现象 尽管Java有垃圾回收机制 GC 但是对于还保持着引用 逻辑上却已经不会再用到的对象 垃圾回收器不会回收它们 内存泄漏带来的危害 用户对单次的内存泄漏并没有什么感知 但当可用
  • 智能优化算法-战争策略算法War Strategy Optimization Algorithm(附Matlab代码)

    引言 战争策略算法War Strategy Optimization Algorithm是基于军队在战争中的战略运动 将战争策略建模为一个优化过程 每个士兵都动态地向最优值移动 该算法对两种流行的战争策略 进攻和防御策略进行建模 士兵在战场
  • VBA技术资料MF54:VBA_EXCEL实时获取鼠标位置

    分享成果 随喜正能量 若人散乱心 乃至以一花 供养于画像 渐见无数佛 所以发一幅释迦牟尼佛像 与同修善友一起每日在微博上供养 只要有供养之心 便可积累功德 以此回向 愿求者如愿苦者得乐 愿这世界吉祥安乐 愿每颗心充满善念 我给VBA的定义
  • 0.96寸OLED12864显示屏设计方案(原理图+PCB+BOM表+程序)

    一 简介 OLED 屏幕作为一种新型的显示技术 其自身可以发光 亮度 对比度高 功耗低 在当下备受追捧 而在我们正常的显示调整参数过程中 我们越来越多的使用这种屏幕 我们使用的一般是分辨率为 128 64 屏幕尺寸为 0 96 寸 由于其较
  • Python包中__init__.py文件的作用和用法

    在Python工程中 我们经常可以看到带有 init py 文件的目录 在PyCharm中 带有这个文件的目录被认为是Python的包目录 与目录的图标有不一样的显示 如下图所示 链接 dir example是一个空白目录 图标是个文件夹图
  • R.I.P,又一位程序员巨佬——左耳朵耗子陨落

    震惊 谣言吧 求辟谣 默哀 左耳朵耗子 在程序员这个群体里应该属于 GOAT 的存在了 虽然每个人心目中都有自己的 GOAT 但耗子叔的影响力可以说是有目共睹 我也是在技术群刷到这张图片的 相信大多数小伙伴和我一样 震惊 谣言吧 求辟谣 默
  • 用C#语言泛化单件模式

    用C 语言泛化单件模式 本人对于C 只能算是初学者 写此随笔 也只为和大家一起讨论 共同进步 我看到过一些用C 语言泛化单件 Singleton 的文章和代码 里面有个问题 即用new来创建对象 比如类似下面这段代码 if instance
  • 串口接受时有关接受标志位详解

    首先我们来看一下MDK对各位的描述 可以发现0 13位接受的是数据个数 填满相当于十进制的8191 那么既然0 13位数据量这么大 代码是如何实现对14 15位的修改呢 废话不多说 先上实现代码 原子哥编写 void USART1 IRQH
  • 简单的redis集群

    条件 3台主机 也可以1台3实例 redis大版本 5 3 4不太一样 下载安装 提前装好gcc wget http download redis io releases redis 5 0 3 tar gz tar redis 5 0 3
  • Linux 多进程模块化设计 - 主进程守护子进程

    Linux 多进程模块化设计 主进程守护子进程 1 Linux多进程 2 示例 3 总结 1 Linux多进程 fork pid t fork void 复制调用进程 并创建为子进程 wait pid t wait int status 等
  • Java压缩工具(zip)

    压缩包使用说明 public class ZipFileUtils web下载打成压缩包的文件 流方式 param response 响应 param fileList 文件列表 param zipName 压缩包名 public stat