站長資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        java文件壓縮亂碼解決方法

        java文件壓縮亂碼解決方法

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

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

        對于壓縮的文件,當(dāng)文件名稱是中文時(shí),若使用JDK API中自帶的類(java.util.zip.ZipEntry; java.util.zip.ZipOutputStream;)進(jìn)行壓縮,壓縮完成后,可以看到壓縮包中的文件名稱是亂碼(文件的內(nèi)容無亂碼問題)。

        此時(shí)只要用ANT中的ant.jar中的類(org.apache.tools.zip.ZipEntry; org.apache.tools.zip.ZipOutputStream;)就可以解決此問題。

        推薦:java視頻教程

        2、ant.jar依賴

        <!-- ant.jar 用于解決文件解壓縮亂碼問題 --> <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 是否保留原來的目錄結(jié)構(gòu),true:保留目錄結(jié)構(gòu);      *            false:所有文件跑到壓縮包根目錄下(注意:不保留目錄結(jié)構(gòu)可能會出現(xiàn)同名文件,會壓縮失敗)      * @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);             // 設(shè)置壓縮的編碼,解決壓縮路徑中的中文亂碼問題             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 是否保留原來的目錄結(jié)構(gòu),true:保留目錄結(jié)構(gòu);      *            false:所有文件跑到壓縮包根目錄下(注意:不保留目錄結(jié)構(gòu)可能會出現(xiàn)同名文件,會壓縮失敗)      * @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) {                 // 需要保留原來的文件結(jié)構(gòu)時(shí),需要對空文件夾進(jìn)行處理                 if (KeepDirStructure) {                     // 空文件夾的處理                     zos.putNextEntry(new ZipEntry(name + "/"));                     // 沒有文件,不需要文件的copy                     zos.closeEntry();                 }             } else {                 for (File file : listFiles) {                     // 判斷是否需要保留原來的文件結(jié)構(gòu)                     if (KeepDirStructure) {                         // 注意:file.getName()前面需要帶上父文件夾的名字加一斜杠,                         // 不然最后壓縮包中就不能保留原來的文件結(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);             }         }     }  }

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
        主站蜘蛛池模板: 久久久久国产精品麻豆AR影院| 中文字幕日韩精品有码视频| 亚洲国产精品无码久久久久久曰 | 国产精品亲子乱子伦xxxx裸| 日韩精品中文字幕第2页| 国产高清在线精品一本大道| 国内精品免费在线观看| 久久国产欧美日韩精品| 亚洲国产精品久久久天堂 | 久久精品国产一区二区三区不卡 | 亚洲精品亚洲人成在线观看| 国内精品久久久久久久coent| 精品精品国产自在久久高清| 精品国产福利一区二区| 老司机亚洲精品影院| 亚洲av午夜成人片精品网站| 日韩精品无码Av一区二区| 久久久久亚洲精品天堂久久久久久| 国产69精品久久久久9999| 337P亚洲精品色噜噜| 一区二区三区精品| 中文字幕精品一区影音先锋 | 欧美精品v国产精品v日韩精品| 自拍偷自拍亚洲精品被多人伦好爽| 毛片a精品**国产| 欧美人与动牲交a欧美精品| 欧美日韩精品一区二区视频| 欧美在线精品永久免费播放| 亚洲精品国产精品乱码不卡| 最新国产在线精品观看| 亚洲精品成人片在线播放| 久久亚洲中文字幕精品有坂深雪| 亚洲av成人无码久久精品| 四虎国产精品永久免费网址| 久久精品国产亚洲AV大全| 91精品国产福利尤物| 丝袜美腿国产精品视频一区| 国产成人精品一区二区三区| 国内精品免费久久影院| 日韩精品欧美国产在线| 老司机亚洲精品影院无码|