java概述
創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括日喀則網(wǎng)站建設(shè)、日喀則網(wǎng)站制作、日喀則網(wǎng)頁(yè)制作以及日喀則網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,日喀則網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到日喀則省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
Java是一門面向?qū)ο缶幊陶Z(yǔ)言,不僅吸收了C++語(yǔ)言的各種優(yōu)點(diǎn),還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語(yǔ)言具有功能強(qiáng)大和簡(jiǎn)單易用兩個(gè)特征。Java語(yǔ)言作為靜態(tài)面向?qū)ο缶幊陶Z(yǔ)言的代表,極好地實(shí)現(xiàn)了面向?qū)ο罄碚?,允許程序員以優(yōu)雅的思維方式進(jìn)行復(fù)雜的編程。
Java具有簡(jiǎn)單性、面向?qū)ο?、分布式、健壯性、安全性、平臺(tái)獨(dú)立與可移植性、多線程、動(dòng)態(tài)性等特點(diǎn) 。Java可以編寫桌面應(yīng)用程序、Web應(yīng)用程序、分布式系統(tǒng)和嵌入式系統(tǒng)應(yīng)用程序等。
java實(shí)現(xiàn)zip壓縮中文文件名亂碼的解決辦法:
一、文件壓縮的中文亂碼問(wèn)題
1、中文文件名的亂碼解決
對(duì)于壓縮的文件,當(dāng)文件名稱是中文時(shí),若使用JDK API中自帶的類(java.util.zip.ZipEntry; java.util.zip.ZipOutputStream;)進(jìn)行壓縮,壓縮完成后,可以看到壓縮包中的文件名稱是亂碼(文件的內(nèi)容無(wú)亂碼問(wèn)題)。此時(shí)只要用ANT中的ant.jar中的類(org.apache.tools.zip.ZipEntry; org.apache.tools.zip.ZipOutputStream;)就可以解決此問(wèn)題。
2、ant.jar依賴
<!-- ant.jar 用于解決文件解壓縮亂碼問(wèn)題 --> <dependency> <groupId>ant</groupId> <artifactId>ant</artifactId> <version>1.6.5</version> </dependency>
二、JAVA實(shí)現(xiàn)ZIP壓縮源代碼
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipOutputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * zip壓縮工具包 * @Class ZipUtils */ public class ZipUtils { private final static Logger logger = LoggerFactory.getLogger(ZipUtils.class); private static final int BUFFER_SIZE = 2 * 1024; /** * 壓縮成ZIP * @param srcFilePath 壓縮文件路徑 * @param tarFilePath 目標(biāo)ZIP輸出路徑 * @param KeepDirStructure 是否保留原來(lái)的目錄結(jié)構(gòu),true:保留目錄結(jié)構(gòu); * false:所有文件跑到壓縮包根目錄下(注意:不保留目錄結(jié)構(gòu)可能會(huì)出現(xiàn)同名文件,會(huì)壓縮失敗) * @throws Exception 壓縮失敗會(huì)拋出異常 */ public static boolean toZip(String srcFilePath, String tarFilePath, boolean KeepDirStructure) throws Exception { boolean isCompressSuccess = false; long start = System.currentTimeMillis(); FileOutputStream fos = null; ZipOutputStream zos = null; try { File sourceFile = new File(srcFilePath); if (!sourceFile.exists()) { throw new FileNotFoundException("待壓縮文件 [" + srcFilePath + "]不存在."); } fos = new FileOutputStream(new File(tarFilePath)); zos = new ZipOutputStream(fos); // 設(shè)置壓縮的編碼,解決壓縮路徑中的中文亂碼問(wèn)題 zos.setEncoding("UTF-8"); compress(sourceFile, zos, sourceFile.getName(), KeepDirStructure); isCompressSuccess = true; long end = System.currentTimeMillis(); logger.info("【文件壓縮】 壓縮完成,耗時(shí):{} ms", (end - start)); } catch (Exception e) { logger.error("【文件壓縮】 壓縮失敗", e); throw new RuntimeException("文件壓縮失敗", e); } finally { closeOutPutStream(zos); closeOutPutStream(fos); } return isCompressSuccess; } /** * 遞歸壓縮方法 * @param sourceFile 源文件 * @param zos zip輸出流 * @param name 壓縮后的名稱 * @param KeepDirStructure 是否保留原來(lái)的目錄結(jié)構(gòu),true:保留目錄結(jié)構(gòu); * false:所有文件跑到壓縮包根目錄下(注意:不保留目錄結(jié)構(gòu)可能會(huì)出現(xiàn)同名文件,會(huì)壓縮失敗) * @throws Exception */ private static void compress(File sourceFile, ZipOutputStream zos, String name, boolean KeepDirStructure) throws Exception { byte[] buf = new byte[BUFFER_SIZE]; if (sourceFile.isFile()) { // 向zip輸出流中添加一個(gè)zip實(shí)體,構(gòu)造器中name為zip實(shí)體的文件的名字 zos.putNextEntry(new ZipEntry(name)); // copy文件到zip輸出流中 int len; FileInputStream in = new FileInputStream(sourceFile); while ((len = in.read(buf)) != -1) { zos.write(buf, 0, len); } zos.closeEntry(); in.close(); } else { File[] listFiles = sourceFile.listFiles(); if (listFiles == null || listFiles.length == 0) { // 需要保留原來(lái)的文件結(jié)構(gòu)時(shí),需要對(duì)空文件夾進(jìn)行處理 if (KeepDirStructure) { // 空文件夾的處理 zos.putNextEntry(new ZipEntry(name + "/")); // 沒有文件,不需要文件的copy zos.closeEntry(); } } else { for (File file : listFiles) { // 判斷是否需要保留原來(lái)的文件結(jié)構(gòu) if (KeepDirStructure) { // 注意:file.getName()前面需要帶上父文件夾的名字加一斜杠, // 不然最后壓縮包中就不能保留原來(lái)的文件結(jié)構(gòu),即:所有文件都跑到壓縮包根目錄下了 compress(file, zos, name + "/" + file.getName(), KeepDirStructure); } else { compress(file, zos, file.getName(), KeepDirStructure); } } } } } /** * 釋放資源 * @Title closeOutPutStream * @param ops * @return void */ public static void closeOutPutStream(OutputStream ops) { if (ops != null) { try { ops.close(); } catch(IOException ex) { logger.error("關(guān)閉輸出流失敗", ex); } } } }
以上就是java實(shí)現(xiàn)zip壓縮中文文件名亂碼怎么辦?的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!
當(dāng)前名稱:java使用zip壓縮中文文件名亂碼的解決辦法
URL網(wǎng)址:http://jinyejixie.com/article6/ipjsog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、微信小程序、面包屑導(dǎo)航、企業(yè)建站、關(guān)鍵詞優(yōu)化、網(wǎng)頁(yè)設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)