日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java zip 压缩乱码_java实现zip压缩中文文件名乱码怎么办?

發布時間:2023/12/8 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java zip 压缩乱码_java实现zip压缩中文文件名乱码怎么办? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java實現zip壓縮中文文件名亂碼怎么辦?

java實現zip壓縮中文文件名亂碼的解決辦法:

一、文件壓縮的中文亂碼問題

1、中文文件名的亂碼解決

對于壓縮的文件,當文件名稱是中文時,若使用JDK API中自帶的類(java.util.zip.ZipEntry; java.util.zip.ZipOutputStream;)進行壓縮,壓縮完成后,可以看到壓縮包中的文件名稱是亂碼(文件的內容無亂碼問題)。此時只要用ANT中的ant.jar中的類(org.apache.tools.zip.ZipEntry; org.apache.tools.zip.ZipOutputStream;)就可以解決此問題。

2、ant.jar依賴antant1.6.5

二、JAVA實現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 目標ZIP輸出路徑 * @param KeepDirStructure 是否保留原來的目錄結構,true:保留目錄結構; * false:所有文件跑到壓縮包根目錄下(注意:不保留目錄結構可能會出現同名文件,會壓縮失敗) * @throws Exception 壓縮失敗會拋出異常 */ 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); // 設置壓縮的編碼,解決壓縮路徑中的中文亂碼問題 zos.setEncoding("UTF-8"); compress(sourceFile, zos, sourceFile.getName(), KeepDirStructure); isCompressSuccess = true; long end = System.currentTimeMillis(); logger.info("【文件壓縮】 壓縮完成,耗時:{} 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 是否保留原來的目錄結構,true:保留目錄結構; * false:所有文件跑到壓縮包根目錄下(注意:不保留目錄結構可能會出現同名文件,會壓縮失敗) * @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輸出流中添加一個zip實體,構造器中name為zip實體的文件的名字 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) { // 需要保留原來的文件結構時,需要對空文件夾進行處理 if (KeepDirStructure) { // 空文件夾的處理 zos.putNextEntry(new ZipEntry(name + "/")); // 沒有文件,不需要文件的copy zos.closeEntry(); } } else { for (File file : listFiles) { // 判斷是否需要保留原來的文件結構 if (KeepDirStructure) { // 注意:file.getName()前面需要帶上父文件夾的名字加一斜杠, // 不然最后壓縮包中就不能保留原來的文件結構,即:所有文件都跑到壓縮包根目錄下了 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("關閉輸出流失敗", ex); } } }}

推薦教程:《JAVA視頻教程》

總結

以上是生活随笔為你收集整理的java zip 压缩乱码_java实现zip压缩中文文件名乱码怎么办?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。