成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

Java 文件流壓縮文件踩過(guò)的坑

IT那活兒 / 1615人閱讀
Java 文件流壓縮文件踩過(guò)的坑

點(diǎn)擊上方“IT那活兒”,關(guān)注后了解更多精彩內(nèi)容!!

背景介紹

相信大家在開(kāi)發(fā)的時(shí)候經(jīng)常用到文件流。對(duì)于生成多個(gè)文件或者需求方要求文件為壓縮包格式,這時(shí)就需要對(duì)文件進(jìn)行壓縮,再通過(guò)sftp/ftp傳送文件。本次開(kāi)發(fā)中就遇到一個(gè)壓縮文件的坑,下面來(lái)分享一下如何解決這個(gè)問(wèn)題。

問(wèn)題描述

在壓縮文件時(shí)我選擇的是使用JDK API中自帶的工具 類(lèi):java.util.zip.ZipEntry; java.util.zip.ZipOutput Stream進(jìn)行壓縮。壓縮時(shí)正常,生成的文件拿到windows系統(tǒng)解壓也正常。
Windows環(huán)境下文件壓縮包內(nèi)的文件
但是在服務(wù)器用unzip命令正常解壓,壓縮包中的中文文件名亂碼。
unzip命令解壓壓縮包文件
修改解壓命令為:unzip -O gbk 解壓則屬于正常情況,說(shuō)明壓縮文件時(shí)字符集出了問(wèn)題。
unzip -O gbk命令解壓壓縮包文件

問(wèn)題排查

在查看源碼之后發(fā)現(xiàn),java.util.zip.ZipOutput  Stream的字符集不可修改,雖然網(wǎng)上有修改源碼的方式解決此問(wèn)題,但是這樣做不僅麻煩,而且不太符合開(kāi)發(fā)規(guī)則。
java.util.zip.ZipOutputStream源碼

解決方案

在試過(guò)多種文件流之后,最終總結(jié)出一種較為簡(jiǎn)單的解決方案:使用apache包下的工具類(lèi)org.apache.commons.compress.archivers.zip;
org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream
org.apache.commons.compress.archivers.zip工具類(lèi)壓縮文件
用修改后的工具類(lèi)生成的壓縮包,在windows和linux環(huán)境下都是正常的,用unzip直接解壓壓縮包則不會(huì)再出現(xiàn)亂碼情況。
org.apache.commons.compress.archivers.zip壓縮的文件解壓
雖然這個(gè)問(wèn)題不是很大,但在我們平時(shí)開(kāi)發(fā)的時(shí)候應(yīng)該還是經(jīng)常會(huì)遇見(jiàn),不細(xì)心的話,這樣的問(wèn)題可能要找很久。平時(shí)多積累一點(diǎn),在下次遇到類(lèi)似的問(wèn)題也會(huì)提供我們解決思路。

本 文 原 創(chuàng) 來(lái) 源:IT那活兒微信公眾號(hào)(上海新炬王翦團(tuán)隊(duì))


文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/129694.html

相關(guān)文章

  • Maven踩過(guò)的坑

    摘要:采用了一種被稱(chēng)之為概念來(lái)管理項(xiàng)目,所有的項(xiàng)目配置信息都被定義在一個(gè)叫做的文件中,通過(guò)該文件,可以管理項(xiàng)目的整個(gè)聲明周期,包括編譯,構(gòu)建,測(cè)試,發(fā)布,報(bào)告等等。目前下絕大多數(shù)項(xiàng)目都已經(jīng)采用進(jìn)行管理。 前言:對(duì)于微軟技術(shù)死忠的筆者來(lái)說(shuō),學(xué)習(xí)JAVA靈活又復(fù)雜的技術(shù)是件多么痛苦的事,開(kāi)始想念我大微軟簡(jiǎn)單的開(kāi)發(fā)環(huán)境搭建以及完整詳盡的開(kāi)發(fā)文檔,還有那一看就懂的案例教程了...可是為了工作,依舊不...

    cgspine 評(píng)論0 收藏0
  • 落地 Spring Could 所踩過(guò)的坑(一)eureka開(kāi)啟驗(yàn)證后無(wú)法連接注冊(cè)中心

    摘要:?jiǎn)栴}描述今天遇到個(gè)問(wèn)題,的端和端本來(lái)已經(jīng)聯(lián)通成功,服務(wù)注冊(cè)發(fā)現(xiàn)都正常。后來(lái)開(kāi)啟了驗(yàn)證功能,端向端注冊(cè)服務(wù)時(shí),需要驗(yàn)證用戶(hù)名和密碼,問(wèn)題就出現(xiàn)了。 問(wèn)題描述 今天遇到個(gè)問(wèn)題,Eureka的Server端和Client端本來(lái)已經(jīng)聯(lián)通成功,服務(wù)注冊(cè)、發(fā)現(xiàn)都正常。后來(lái)開(kāi)啟了驗(yàn)證功能,Client端向Server端注冊(cè)服務(wù)時(shí),需要驗(yàn)證用戶(hù)名和密碼,問(wèn)題就出現(xiàn)了。 Client端無(wú)法向Server...

    Thanatos 評(píng)論0 收藏0
  • 【渣渣程序員踩過(guò)的坑】PHP的hash_hmac簽名加密,PHP迷一樣的base64_encode

    摘要:如何獲取受支持的算法清單,請(qǐng)參見(jiàn)。要進(jìn)行哈希運(yùn)算的消息。使用生成信息摘要時(shí)所使用的密鑰。設(shè)置為輸出原始二進(jìn)制數(shù)據(jù),設(shè)置為輸出小寫(xiě)進(jìn)制字符串。 介紹一下問(wèn)題的背景: 本人一枚小小PHPer,有一天公司的Java找到我,讓我?guī)兔?xiě)一個(gè)接口的Demo,心想:‘最喜歡寫(xiě)接口了,來(lái)來(lái)來(lái)來(lái)!’,于是Java就帶著Java版Demo來(lái)了,大概看了一遍,具體涉及以下幾點(diǎn):(不想了解的看最后一部分,就好...

    Rocture 評(píng)論0 收藏0
  • 【渣渣程序員踩過(guò)的坑】PHP的hash_hmac簽名加密,PHP迷一樣的base64_encode

    摘要:如何獲取受支持的算法清單,請(qǐng)參見(jiàn)。要進(jìn)行哈希運(yùn)算的消息。使用生成信息摘要時(shí)所使用的密鑰。設(shè)置為輸出原始二進(jìn)制數(shù)據(jù),設(shè)置為輸出小寫(xiě)進(jìn)制字符串。 介紹一下問(wèn)題的背景: 本人一枚小小PHPer,有一天公司的Java找到我,讓我?guī)兔?xiě)一個(gè)接口的Demo,心想:‘最喜歡寫(xiě)接口了,來(lái)來(lái)來(lái)來(lái)!’,于是Java就帶著Java版Demo來(lái)了,大概看了一遍,具體涉及以下幾點(diǎn):(不想了解的看最后一部分,就好...

    henry14 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<