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

背景介绍

相信大家在开发的时候经常用到文件流。对于生成多个文件或者需求方要求文件为压缩包格式,这时就需要对文件进行压缩,再通过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.ZipArchiveOutputStreamorg.apache.commons.compress.archivers.zip工具类压缩文件:图片用修改后的工具类生成的压缩包,在windows和linux环境下都是正常的,用unzip直接解压压缩包则不会再出现乱码情况。org.apache.commons.compress.archivers.zip压缩的文件解压:图片虽然这个问题不是很大,但在我们平时开发的时候应该还是经常会遇见,不细心的话,这样的问题可能要找很久。平时多积累一点,在下次遇到类似的问题也会提供我们解决思路。

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

发表评论

登录后才能评论
网站客服
网站客服
申请收录 侵权处理
分享本页
返回顶部