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

        java文件壓縮亂碼解決方法

        java文件壓縮亂碼解決方法

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

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

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

        此時只要用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實現(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 目標ZIP輸出路徑      * @param KeepDirStructure 是否保留原來的目錄結構,true:保留目錄結構;      *            false:所有文件跑到壓縮包根目錄下(注意:不保留目錄結構可能會出現(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);             // 設置壓縮的編碼,解決壓縮路徑中的中文亂碼問題             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:所有文件跑到壓縮包根目錄下(注意:不保留目錄結構可能會出現(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輸出流中添加一個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);             }         }     }  }

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
        主站蜘蛛池模板: 亚洲国产精品ⅴa在线观看| 亚洲性日韩精品一区二区三区| 99视频在线精品国自产拍亚瑟| 中文字幕精品亚洲无线码一区| 国产成人精品久久亚洲| 国产精品无码日韩欧| 亚洲精品无码久久久久去q| 精品国产一区二区三区久久蜜臀 | 97人妻无码一区二区精品免费| 亚洲综合精品网站在线观看| 久久精品国产精品亚洲| 成人精品视频成人影院| 久久久精品免费国产四虎| 国产99视频精品免视看7| 四虎国产精品永久在线观看| 在线精品国产一区二区三区| 欧美日韩精品| 日韩精品视频在线观看免费| 久久久久亚洲精品男人的天堂| 国产精品男男视频一区二区三区| 视频二区国产精品职场同事| 久久r热这里有精品视频| 国产短视频精品一区二区三区| 国产亚洲精品自在久久| 精品国产三级a在线观看| 午夜精品久久久久久久| 日韩人妻无码精品一专区 | 久久久久久无码国产精品中文字幕| 91精品成人免费国产片| 亚洲精品免费视频| 九九99精品久久久久久| laowang在线精品视频| 国产AV午夜精品一区二区三区| 国产AV国片精品有毛| 国内精品久久久久久野外| 国产精品久久久久久| 四虎成人精品免费影院| 98香蕉草草视频在线精品看| 国产成人无码精品一区在线观看 | 伊人久久精品无码av一区| 亚洲欧美精品午睡沙发|