资讯专栏INFORMATION COLUMN

Java 文件流压缩文件踩过的坑

IT那活儿 / 1515人阅读
Java 文件流压缩文件踩过的坑

点击上方“IT那活儿”,关注后了解更多精彩内容!!

背景介绍

相信大家在开发的时候经常用到文件流。对于生成多个文件或者需求方要求文件为压缩包格式,这时就需要对文件进行压缩,再通过sftp/ftp传送文件。本次开发中就遇到一个压缩文件的坑,下面来分享一下如何解决这个问题。

问题描述

在压缩文件时我选择的是使用JDK API中自带的工具 类:java.util.zip.ZipEntry; java.util.zip.ZipOutput Stream进行压缩。压缩时正常,生成的文件拿到windows系统解压也正常。
Windows环境下文件压缩包内的文件
但是在服务器用unzip命令正常解压,压缩包中的中文文件名乱码。
unzip命令解压压缩包文件
修改解压命令为:unzip -O gbk 解压则属于正常情况,说明压缩文件时字符集出了问题。
unzip -O gbk命令解压压缩包文件

问题排查

在查看源码之后发现,java.util.zip.ZipOutput  Stream的字符集不可修改,虽然网上有修改源码的方式解决此问题,但是这样做不仅麻烦,而且不太符合开发规则。
java.util.zip.ZipOutputStream源码

解决方案

在试过多种文件流之后,最终总结出一种较为简单的解决方案:使用apache包下的工具类org.apache.commons.compress.archivers.zip;
org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream
org.apache.commons.compress.archivers.zip工具类压缩文件
用修改后的工具类生成的压缩包,在windows和linux环境下都是正常的,用unzip直接解压压缩包则不会再出现乱码情况。
org.apache.commons.compress.archivers.zip压缩的文件解压
虽然这个问题不是很大,但在我们平时开发的时候应该还是经常会遇见,不细心的话,这样的问题可能要找很久。平时多积累一点,在下次遇到类似的问题也会提供我们解决思路。

本 文 原 创 来 源:IT那活儿微信公众号(上海新炬王翦团队)


文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129694.html

相关文章

  • Maven踩过的坑

    摘要:采用了一种被称之为概念来管理项目,所有的项目配置信息都被定义在一个叫做的文件中,通过该文件,可以管理项目的整个声明周期,包括编译,构建,测试,发布,报告等等。目前下绝大多数项目都已经采用进行管理。 前言:对于微软技术死忠的笔者来说,学习JAVA灵活又复杂的技术是件多么痛苦的事,开始想念我大微软简单的开发环境搭建以及完整详尽的开发文档,还有那一看就懂的案例教程了...可是为了工作,依旧不...

    cgspine 评论0 收藏0
  • 落地 Spring Could 所踩过的坑(一)eureka开启验证后无法连接注册中心

    摘要:问题描述今天遇到个问题,的端和端本来已经联通成功,服务注册发现都正常。后来开启了验证功能,端向端注册服务时,需要验证用户名和密码,问题就出现了。 问题描述 今天遇到个问题,Eureka的Server端和Client端本来已经联通成功,服务注册、发现都正常。后来开启了验证功能,Client端向Server端注册服务时,需要验证用户名和密码,问题就出现了。 Client端无法向Server...

    Thanatos 评论0 收藏0
  • 【渣渣程序员踩过的坑】PHP的hash_hmac签名加密,PHP迷一样的base64_encode

    摘要:如何获取受支持的算法清单,请参见。要进行哈希运算的消息。使用生成信息摘要时所使用的密钥。设置为输出原始二进制数据,设置为输出小写进制字符串。 介绍一下问题的背景: 本人一枚小小PHPer,有一天公司的Java找到我,让我帮忙写一个接口的Demo,心想:‘最喜欢写接口了,来来来来!’,于是Java就带着Java版Demo来了,大概看了一遍,具体涉及以下几点:(不想了解的看最后一部分,就好...

    Rocture 评论0 收藏0
  • 【渣渣程序员踩过的坑】PHP的hash_hmac签名加密,PHP迷一样的base64_encode

    摘要:如何获取受支持的算法清单,请参见。要进行哈希运算的消息。使用生成信息摘要时所使用的密钥。设置为输出原始二进制数据,设置为输出小写进制字符串。 介绍一下问题的背景: 本人一枚小小PHPer,有一天公司的Java找到我,让我帮忙写一个接口的Demo,心想:‘最喜欢写接口了,来来来来!’,于是Java就带着Java版Demo来了,大概看了一遍,具体涉及以下几点:(不想了解的看最后一部分,就好...

    henry14 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<