java工具类 文件zip压缩 base64 加密,base64解密 zip解压

2023-05-16

代码:

package com.cfam.utils;

import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * <p>
 * Title: ZipToBase64.java</p>
 * <p>
 * Description: 压缩 转 base64 网络传输</p>
 * 
 * @author ken chen
 * @date 2019年7月26日
 * @param srcFiles 需要压缩的文件
 * @return Base64 压缩文件后进行base64编码
 * @version 1.0
 */
public class ZipToBase64 {

    private static final int BUFFER_SIZE = 2 * 1024;

    private static final Logger log = LoggerFactory.getLogger(ZipToBase64.class);

    public static String toBase64Zip(List<File> srcFiles) throws RuntimeException {
        log.info("开始压缩文件    [{}]", srcFiles);
        long start = System.currentTimeMillis();
        String base64toZip = "";
        ZipOutputStream zos = null;
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        try {
            zos = new ZipOutputStream(baos);
            for (File srcFile : srcFiles) {
                byte[] buf = new byte[BUFFER_SIZE];
                log.info("压缩的文件名称    [{}]   ", srcFile.getName() + "压缩的文件大小      [{}] ", srcFile.length());
                zos.putNextEntry(new ZipEntry(srcFile.getName()));
                int len;
                FileInputStream in = new FileInputStream(srcFile);
                while ((len = in.read(buf)) != -1) {
                    zos.write(buf, 0, len);
                }
                zos.closeEntry();
                in.close();
            }
            long end = System.currentTimeMillis();
            log.info("压缩完成,耗时:    [{}] ms", (end - start));
        } catch (Exception e) {
            throw new RuntimeException("zip error from ZipToBase64", e);
        } finally {
            if (zos != null) {
                try {
                    zos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        
        byte[] refereeFileBase64Bytes =Base64.getEncoder().encode(baos.toByteArray());
        try {
            base64toZip = new String(refereeFileBase64Bytes, "UTF-8");
        } catch (Exception e) {
            throw new RuntimeException("压缩流出现异常", e);
        }
        return base64toZip;
    }

    /**
     * <p>
     * Title: ZipToBase64.java</p>
     * <p>
     * Description: Base64 解密 zip 解压缩 </p>
     * 
     * @author ken chen
     * @date 2019年7月26日
     * @param path   解压文件夹路径 文件夹父文件可更改
     * @param base64 base64加密字符
     * @return Base64 压缩文件后进行base64编码
     * @version 1.0
     */
    public static void Base64ToFile(String base64, String path) throws RuntimeException {
        log.info("解压文件地址" + path);
        try {
            byte[] byteBase64 =Base64.getDecoder().decode(base64);
            ByteArrayInputStream byteArray = new ByteArrayInputStream(byteBase64);
            ZipInputStream zipInput = new ZipInputStream(byteArray);
            ZipEntry entry = zipInput.getNextEntry();
            File fout = null;
            File file = new File(path);
            String parent = file.getParent();
            while (entry != null && !entry.isDirectory()) {
                log.info("文件名称:    [{}]", entry.getName());
                fout = new File(parent, entry.getName());
                if (!fout.exists()) {
                    (new File(fout.getParent())).mkdirs();
                }
                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(fout));
                int offo = -1;
                byte[] buffer = new byte[BUFFER_SIZE];
                while ((offo = zipInput.read(buffer)) != -1) {
                    bos.write(buffer, 0, offo);
                }
                bos.close();
                // 获取 下一个文件
                entry = zipInput.getNextEntry();
            }
            zipInput.close();
            byteArray.close();
        } catch (Exception e) {
            throw new RuntimeException("解压流出现异常", e);
        }

    }

    public static void main(String[] args) {
        // 文件压缩
        List<File> fileList = new ArrayList<File>();
        fileList.add(new File("C:\\Users\\cjy\\Desktop\\qqq\\担保合同附件.pdf"));
        fileList.add(new File("C:\\Users\\cjy\\Desktop\\qqq\\融资申请表.xls"));
        fileList.add(new File("C:\\Users\\cjy\\Desktop\\qqq\\其他附件.jpg"));
        String base64 = ZipToBase64.toBase64Zip(fileList);
        log.info("文件base 64 加密:" + base64);
        ZipToBase64.Base64ToFile(base64, "C:\\Users\\cjy\\Desktop\\qqq\\新建文件夹\\a");

    }
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java工具类 文件zip压缩 base64 加密,base64解密 zip解压 的相关文章

  • 【Python入门知识】类和对象,要想学的好基础得打好

    前言 嗨喽 大家好呀 xff0c 这里是魔王呐 Python 类 对象 Python 是一种面向对象的编程语言 Python 中的几乎所有东西都是对象 xff0c 拥有属性和方法 类 xff08 Class xff09 类似对象构造函数 x
  • Nas里搭建Frpc内网穿透客户端【超级无脑】

    接上篇 Linux搭建Frps内网穿透服务器端 xff0c 搭建了一个Frps的服务端 xff0c 建议也可以先去看下 这篇文章分享如何在群晖Nas里面搭建一个客户端 xff0c 成功后 xff0c 可以在远程把资料同步到自己的nas上 x
  • 使用C++实现的学生成绩管理系统(附完整代码)

    一 系统需求分析 学生成绩管理系统可以录入 查询 修改学生的成绩 xff0c 它包括 xff1a 信息条目序号 学生姓名 课程名称 课程学分数 学生该课程的成绩 xff08 百分制成绩 xff0c 等级制成绩 xff0c 绩点 xff09
  • If your system is using EFI Secure Boot you may need to sign the kernel modules

    Ubuntu 安装 virtualBox 报错 root 64 VM 0 6 ubuntu home ubuntu newdocker span class token comment dpkg i virtualbox 6 0 6 0 8
  • Python教程:异或运算符(^)、与运算符(&)、或运算符(|)、反运算符(~)、右移运算符(>>)、无符号右移运算符(>>>)

    1 异或的含义 异或运算与一般的逻辑或不同 xff0c 异或算符的值为真仅当两个运算元中恰有一个的值为真 xff0c 而另外一个的值为非真 转化为命题 xff0c 就是 xff1a 两者的值不同 或 有且仅有一个为真 符号为 XOR 或 E
  • Python实战1——计算生日还有多少天

    这个程序功能是可以输入生日 xff0c 比如 xff1a 5月6号 xff0c 按下确定 xff0c 程序就自动算出距离今天还有多少天 Python的代码如下 import turtle as t import datetime t set
  • 51单片机自学笔记(1)——定时计数器

    1 定时 计数器的介绍 51单片机一共有两个16位的 定时 计数 器 T0 T1 其数据均存放于特殊功能寄存器 xff08 SFR xff09 中 T0的16位数据分两部分存放 xff0c 高8位存放在TH0 其字节地址位8CH xff0c
  • 200行Python代码实现B站UP主小助手(显示视频播放数、粉丝数等)

    功能点 显示日期时间显示树莓派当前局域网IP显示当前UP主粉丝数显示B站未读消息显示B站视频总计播放数显示视频总计获赞数显示总计获得充电次数显示直播间人气值显示直播间弹幕将直播间弹幕念出来 xff08 TTS xff09 功能是不是还挺丰富
  • Python OCR工具pytesseract详解

    pytesseract是基于Python的OCR工具 xff0c 底层使用的是Google的Tesseract OCR 引擎 xff0c 支持识别图片中的文字 xff0c 支持jpeg xff0c png xff0c gif xff0c b
  • GPG error: https://download.docker.com/linux/ubuntu bionic InRelease: The following signatures could

    问题 xff1a sudo apt update 报错 xff1a GPG error https download docker com linux ubuntu bionic InRelease The following signat
  • MySQL_where条件查询

    where条件查询的介绍 使用where条件查询可以对表中的数据进行筛选 xff0c 条件成立的记录会出现在结果集中 where语句支持的运算符 比较运算符逻辑运算符模糊查询范围查询空判断 where条件查询的语法格式如下 select f
  • python制作手机游戏脚本能使用到的相关方法

    对手机屏幕位置进行点击 span class token keyword def span span class token function click span span class token punctuation span sel
  • 剑与远征_python_自动战斗

    继上一个yys脚本后又写了一个剑与远征的小脚本 今天刚写的 用了一会 感觉还不错 虽然功能单一 但是还是很稳定所以就拿来和大家分享一下 不多bb 上代码 span class token comment coding 61 gbk span
  • 新版阴阳师桌面版pc端固定窗口大小多开

    阴阳师pc端固定窗口大小多开 随着阴阳师2020年周年的到来 阴阳师官方对手机端和pc端也是进行了强制更新 更新后导致pc端的阴阳师没法像之前一样固定游戏开启时的大小 在网上查阅了一些资料 在众多方法中整理出了一个比较简单的方法和大家分享一
  • python查看鼠标坐标方法

    python查看鼠标坐标方法 该方法主要是在制作简单的游戏脚本时 用于获取点击参数时使用 span class token keyword import span pymouse span class token keyword print
  • "=="和equals方法有什么区别?

    61 61 操作符专门用来比较两个变量的值是否相等 xff0c 也就是用于比较变量所对应的内存中所存储的数值是否相同 比较两个引用变量 所指向的内存地址是否相同 xff0c 要比较两个基本类型的数据或两个引用变量是否相等 xff0c 只能用
  • HTTP协议状态码的含义

    1 xff1a 请求收到 xff0c 继续处理 2 xff1a 操作成功收到 xff0c 分析 接受 3 xff1a 完成此请求必须进一步处理 4 xff1a 请求包含一个错误语法或不能完成 5 xff1a 服务器执行一个完全有效请求失败
  • oracle客户端访问服务器端

    oracle客户端访问服务器端 xff0c 在本地是很容易的 xff0c 但是要实现远程访问却有一点小麻烦 xff0c 主要是如何连接远程服务器的问题 xff0c 关于这个问题请参照上一篇转载的文章 xff0c 本文主要讲解 xff0c 如
  • classpath , path , java_home的作用

    CLASSPATH是什么 xff1f 它的作用是什么 xff1f 它是javac编译器的一个环境变量 它的作用与import package关键字有关 当你写下improt java util 时 xff0c 编译器面对import关键字时
  • HQL

    hql HQL查询 xff1a Criteria查询对查询条件进行了面向对象封装 xff0c 符合编程人员的思维方式 xff0c 不过HQL Hibernate Query Language 查询提供了更加丰富的和灵活的查询特性 xff0c

随机推荐

  • HDFS操作常用的Shell命令;

    向HDFS中上传任意本地文件 hadoop fs copyFromLocal URI f 如果文件存在 xff0c 则覆盖 从本地文件系统考贝到集群上 向一个已经存在的HDFS中的文本文件中 xff0c 追加本地文件的内容到HDFS原有文件
  • JS如何使用多个相同ID

    39 id 61 39 43 xff49 xff44 43 39 39 show 即可
  • 【开源硬件篇】STM32F103C8T6核心板

    STM32F103C8T6核心板 文章目录 STM32F103C8T6核心板一 STM32F103C8T6芯片1 1 STM32F103C8T6简介1 2 芯片引脚说明 二 去耦电路2 1 原理图设计2 2 原理分析2 2 1 结论2 2
  • python-markdown语法

    python的markdown扩展 xff0c 功能较为丰富 xff0c 里面甚至集成了一些 rST style 的命令 极大的扩展了文章的表现力 也有第三方扩展 64 Officially Supported Extensions Ext
  • 请求方式为post时SpringMVC无法直接跳转页面

    2020年3月24日补充 这种问题不存在于thymeleaf模板 使用thymeleaf模板后再后台直接跳转也是可以的 html页面 错误示范 报错 正确示范 起因 今天在学如何搭建简单的SpringSecurity时准备先搭建一个简单的s
  • Ubuntu 20使用devstack快速安装openstack最新版

    OpenStack介绍 openstack详细介绍及常用命令请查看此文 通过devstack部署OpenStack xff0c 官方文档点击此处查看 安装环境 工具 xff1a VMware Workstation 16 Pro 操作系统
  • windows 10 内置ubuntu 开启以及应用

    刚到新公司最不习惯的就是公司用的windows xff0c 用了两年的linux 突然之间用windows 是件很痛苦的事情 xff0c 不过win 10 很好的解决了我的问题 xff0c 最新版的 Windows 10 Insider P
  • python中exp函数如何实现指数计算?

    之前小编向大家介绍过python中的对数函数log函数 xff08 https www py cn jishu jichu 21780 html xff09 xff0c 对于有点复杂的计算 xff0c 我们是可以通过计算机来帮我们解决的 例
  • 1、stf二次开发-环境配置-node8安装

    1 stf二次开发 环境配置 node8安装 Contes7 X64 linux系统 stf二次开发 环境配置 node8安装 1 新建一个node文件夹用于安装node span class token function mkdir sp
  • 0、stf二次开发-解决CentOS网络问题

    0 stf二次开发 解决CentOS网络问题 stf二次开发 解决CentOS网络问题 转载 xff1a https www cnblogs com zhouheblog p 10442274 html
  • 32、取一个整数a从右端开始的4~7位

    32 取一个正整数a从右端开始的4 xff5e 7位 程序分析代码实现 程序分析 可以考虑两种实现方法 方法1 将合理的整数转换为字符串 span class token comment 方法1 转换为字符串处理 span span cla
  • 0、stf二次开发-CentOS-环境变量如何配置

    stf二次开发 CentOS 环境变量如何配置 需要root用户下执行以下代码 打开环境配置文件 gedit etc profil 在文本最下边添加需要配置的环境 span class token builtin class name ex
  • 1、stf二次开发-环境配置-adb安装

    1 stf二次开发 环境配置 adb安装 1 进入到想要安装adb的目录 span class token builtin class name cd span 想要安装的的目录 新建一个android目录并进入 span class to
  • 1、stf二次开发-环境配置-rethinkdb安装

    1 stf二次开发 环境配置 rethinkdb安装 此篇针对CentOS7的安装 xff0c 其他系统请参考rethinkdb官网 参考官网 span class token function sudo span span class t
  • 0、stf二次开发-CentOS-基础配置

    0 stf二次开发 CentOS 基础配置 使用centOS时需要用到命令 configure make make install 使用以上命令需要安装make vim gcc 即C 43 43 yum y span class token
  • 1、stf二次开发-环境配置-GraphicsMagick安装

    1 stf二次开发 环境配置 GraphicsMagick安装 1 下载GraphicsMagick tar gz压缩包 xff0c 放到自己要安装的目录 2 解压压缩包 GraphicsMagick 1 3 26 tar gz根据自己的压
  • github加速接口

    https github com
  • 交叉编译libX11

    0 前言 本文探索如何将libX11移植到ARM开发板 1 源码 从参考资料 1 或这里下载相关源码 xff0c 本文下载源码为 xff1a libX11 1 5 0 tar bz2 新建一个src目录 xff0c 并且将源码解压到其中 x
  • 2021-03-14

    题目描述 This past fall Farmer John took the cows to visit a corn maze But this wasn t just any corn maze it featured severa
  • java工具类 文件zip压缩 base64 加密,base64解密 zip解压

    代码 xff1a package com cfam utils import java io BufferedOutputStream import java io ByteArrayInputStream import java io B