java 使用gzip压缩和解压 传输文件必备

java gzip 压缩解压工具类,开箱即用
gzip原理看我另外一篇介绍
压缩效果直接看图:
在这里插入图片描述

package com.yeahmobi.datacheck.util;import java.io.*;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;public class CompressUtil {public static void main(String[] args) throws IOException {// 原文件String inFileName = "D:\\response.xls";compressFile(inFileName);// 压缩文件//String gzFileName = "D:\\response.xls.gz";//doUncompressFile(gzFileName);}// 压缩public static void compressFile(String inFileName) throws IOException {FileInputStream in = null;GZIPOutputStream out = null;String outFileName = inFileName + ".gz";try {in = new FileInputStream(new File(inFileName));} catch (FileNotFoundException e) {throw new RuntimeException("文件不存在:" + inFileName);}out = new GZIPOutputStream(new FileOutputStream(outFileName));byte[] buf = new byte[10240];int len = 0;if (in != null && out != null) {try {while (((in.available() > 10240) && (in.read(buf)) > 0)) {out.write(buf);}len = in.available();in.read(buf, 0, len);out.write(buf, 0, len);in.close();out.flush();out.close();} catch (IOException e) {throw new RuntimeException("压缩失败:" + inFileName);}}in.close();out.close();}// 解压public static void doUncompressFile(String inFileName) {try {if (!getExtension(inFileName).equalsIgnoreCase("gz")) {throw new RuntimeException("文件名必须是gz后缀");}GZIPInputStream in = null;try {in = new GZIPInputStream(new FileInputStream(inFileName));} catch (FileNotFoundException e) {throw new RuntimeException("文件不存在 " + inFileName);}String outFileName = getFileName(inFileName);try (FileOutputStream out = new FileOutputStream(outFileName);) {byte[] buf = new byte[1024];int len;while ((len = in.read(buf)) > 0) {out.write(buf, 0, len);}in.close();out.close();} catch (FileNotFoundException e) {throw new RuntimeException("解压失败" + outFileName);}} catch (IOException e) {throw new RuntimeException("失败");}}// 获取文件后缀名public static String getExtension(String f) {String ext = "";int i = f.lastIndexOf('.');if (i > 0 && i < f.length() - 1) {ext = f.substring(i + 1);}return ext;}// 获取文件名public static String getFileName(String f) {String fname = "";int i = f.lastIndexOf('.');if (i > 0 && i < f.length() - 1) {fname = f.substring(0, i);}return fname;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/499733.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring boot maven项目返回值乱码的解决方法

spring boot maven项目返回值乱码的解决方法 1、先看乱码效果&#xff1a; spring boot maven项目&#xff0c;返回值乱码&#xff0c;如下图&#xff1a; 控制台打印log乱码&#xff0c;如下图&#xff1a; 有swagger的话&#xff0c;swagger文档乱码&#xff0c;如下图&…

云服务和serverless

云服务中的一些基础概念 IaaS&#xff08;Infrastructure as a server&#xff09;基础设施即服务 基础设施就是物理服务器 云服务厂商把物理服务器搭好&#xff0c;直接卖云端服务器或者虚拟机 用户可以自己装系统&#xff0c;然后装软件等等 PaaS&#xff08;Platform as …

【错误记录】Invalid character found in method name. HTTP method names must be tokens

错误日志 [2020-08-14 10:47:11.262] [http-nio-8093-exec-7] [INFO] [o.a.c.h.Http11Processor] [Error parsing HTTP request header Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.] java.lang.IllegalArgumentException: Invali…

redis 常见基础面试题

1、在项目中缓存是如何使用的&#xff1f;为什么要用缓存&#xff1f;缓存使用不当会造成什么后果&#xff1f; 面试官心理分析 这个问题&#xff0c;互联网公司必问&#xff0c;要是一个人连缓存都不太清楚&#xff0c;那确实比较尴尬。 只要问到缓存&#xff0c;上来第一个…

api接口设计

api接口设计 健壮性 对外提供的接口&#xff0c;最好支持幂等性&#xff0c;即相同的请求重复调用&#xff0c;服务端的操作应该只有一次&#xff0c;并且每次返回的结果应该是一样的。 一般的做法是要求客户端在每次调用的时候带上唯一键&#xff0c;服务端第一次正常处理&a…

【转载】广告系统架构解密

广告、增值服务、佣金&#xff0c;是互联网企业最常见的三种盈利手段。在这3大经典中&#xff0c;又以广告所占的市场份额最大&#xff0c;几乎是绝大部分互联网平台最主要的营收途径&#xff0c;业务的重要性不言而喻。 从技术角度来说&#xff0c;广告业务涉及到 AI算法、大数…

【读书笔记】--- 《码出高效:java开发手册》

这几天读了几本书&#xff0c;突然觉得可以写点什么&#xff0c;因为我也看了不少书了&#xff0c;于是就有了个想法&#xff0c;我可以在我看过的每本书后&#xff0c;把我的一些想法记录下来&#xff0c;一方面可以供以后回忆&#xff0c;一方面可以让读者看到后&#xff0c;…

quartz 报错:Failure obtaining db row lock: Table ‘test.QRTZ_LOCKS‘ doesn‘t exist

问题&#xff1a; spring-boot 整合quartz的时候&#xff0c;连接windows的mysql的时候好好的&#xff0c;然而用linux上的mysql的时候&#xff0c;启动就报了这个错&#xff1a; Failure obtaining db row lock: Table ‘test.QRTZ_LOCKS’ doesn’t exist 分析&#xff1a…

quartz 本地有效,线上失效的问题

问题&#xff1a; 最近开了一个新项目&#xff0c;spring boot 整合了quartz&#xff0c;出现了一个问题&#xff0c;就是当项目连接到本地电脑的数据库时&#xff0c;一切正常。但是当项目连接远程linux上的数据库的时候&#xff0c;发现定时任务不灵了&#xff0c;也不是不执…

关于SimpleDateFormat线程不安全的源码分析

SimpleDateFormat&#xff0c;线程不安全&#xff0c;源码分析 1、先看SimpleDateFormat类图 SimpleDateFormat继承了DateFormat DateFormat中有个成员变量是Calendar&#xff0c;这个先记住&#xff0c;线程不安全主要就是因为这个成员变量 2、看下图SimpleDateFormat的p…

mysql 报错 Specified key was too long; max key length is 767 bytes,开启系统变量:innodb_large_prefix

mysql 报错 Specified key was too long; max key length is 767 bytes 当mysql数据库的字符集使用了utf8mb4&#xff0c;就很容易在执行建表sql的时候报这个错误。 原因&#xff1a; mysql有个系统变量innodb_large_prefix&#xff0c; 如果开启了&#xff0c;索引键前缀限…

mysql8.0 线上线下数据库版本不一致导致的问题

问题&#xff1a; 线上注册失败&#xff0c;线下测试环境没问题 update t_authentication_code set invalid 0,update_time sysdate() where email ‘XXX’ and code ‘XXX’ and invalid 1; 同样的sql&#xff0c;线下执行成功&#xff0c;线上却一直没有修改成功 分析…

vue 每次弹框都初始化

之前弹框都是下图这种&#xff1a; 通过detailOpen变量控制是否显示弹框 但这种最近在整合tinymce富文本编辑器的时候&#xff0c;发现第二次弹框数据没有回填 原因是因为第一次弹框关闭后&#xff0c;没有初始化&#xff0c;从而影响了后面的弹框功能。 修改成下图就好了&…

微信小程序支付流程(新手教程)

微信小程序支付流程&#xff1a; 一、前期申请准备工作 1、小程序注册&#xff0c;要以公司的以身份去注册一个小程序&#xff0c;才能开通微信支付权限&#xff1b; 个人申请的小程序是不具备“微信支付”功能的&#xff01; 但个人小程序可以生成微信支付的那个收款二维码&…

mysql 报错解决思考Expression #5 of SELECT list is not in GROUP BY clause and contains nonaggregated column

mysql报错&#xff1a; [Err] 1055 - Expression #5 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘库名.表名.字段’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_modeonly_full_g…

报表设计调研分享

公司结算系统要做一个内部报表&#xff0c;想自己开发&#xff0c;调研了市面上一圈报表&#xff0c;快把github翻烂了&#xff0c;也没找到一个合适的。 之前给做过一个自定义sql查询的&#xff0c;但最终是因为系统太过复杂&#xff0c;导致最终sql复杂到没法写了&#xff0c…

java 调用groovy脚本,实现多个sql按指定逻辑运行,可做报表预聚合

java 调用groovy脚本&#xff0c;实现多个sql按指定逻辑运行&#xff0c;可做报表预聚合 1、引入pom <dependency><groupId>org.codehaus.groovy</groupId><artifactId>groovy</artifactId><version>2.1.6</version></dependenc…

互联网技术部门该如何管理

互联网技术部门该如何管理 一、敏捷开发 1.快速开发、快速迭代。 2.组件式开发&#xff0c;避免重复造轮子。 3.制定代码标准。 4.并行开发&#xff0c;高效配合。 5.单元测试必须覆盖所有核心业务。 二、DevOps流程建立起来 1.建立三套环境&#xff1a;测试、SandBox、…

分布式基础

四大基础理论 拜占庭将军问题 CAP 理论 为什么CAP不能同时满足的简单理解 ACID 理论 BASE 理论 八大分布式协议和算法 Paxos 算法 Raft 算法 [分布式一致性协议] ------ raft协议的解释与理解 一致性 Hash 算法 hash和一致性hash Gossip 协议算法 Quorum NWR 算法…

java file.renameTo返回false的原因记录

需要对文件夹下的文件重命名&#xff0c;发现返回false了&#xff0c;先用main方法测试&#xff0c;发现没问题&#xff0c;如下 public static void main(String[] args) throws IOException {File file1 new File("D:\\aabb.xml");File file2 new File("D:\…