91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java壓縮組件出現文件名亂碼如何解決

發布時間:2020-11-11 15:51:28 來源:億速云 閱讀:179 作者:Leah 欄目:編程語言

這篇文章給大家介紹Java壓縮組件出現文件名亂碼如何解決,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

最近發現Java原生的Zip壓縮組件在壓縮過程中,不支持文件名的中文編碼,會在壓縮過程中把中文文件名變成亂碼。Apache的ant包中的壓縮組件修復了這個問題,如果你在使用壓縮功能時需要支持中文文件名,建議你直接使用Apache的壓縮組件來實現這個功能。

具體使用方法:

1.在你的pom文件中增加對Apache的ant工具包的dependency:

    <dependency>
      <groupId>org.apache.ant</groupId>
      <artifactId>ant</artifactId>
      <version>1.9.3</version>
    </dependency>

并在頭部引用用到的類:

import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;

2.壓縮的方法實現,大家注意,本組件支持設置編碼(setEncoding("GBK")方法),解決了中文編碼的問題:

public static void compress(String srcPath , String dstPath) throws IOException{
    File srcFile = new File(srcPath);
    File dstFile = new File(dstPath);
    if (!srcFile.exists()) {
      throw new FileNotFoundException(srcPath + "does not exists");
    }

    FileOutputStream out = null;
    ZipOutputStream zipOut = null;
    try {
      out = new FileOutputStream(dstFile);
      zipOut = new ZipOutputStream(new BufferedOutputStream(out));
      zipOut.setEncoding("GBK");
      String baseDir = "";
      compress(srcFile, zipOut, baseDir);
    }
    catch (Throwable ex){
      throw new RuntimeException(ex);
    }
    finally {
      if(null != zipOut){
        zipOut.close();
        out = null;
      }

      if(null != out){
        out.close();
      }
    }
  }


private static void compress(File file, ZipOutputStream zipOut, String baseDir) throws IOException{
    if (file.isDirectory()) {
      compressDirectory(file, zipOut, baseDir);
    } else {
      compressFile(file, zipOut, baseDir);
    }
  }

  /** 壓縮一個目錄 */
  private static void compressDirectory(File dir, ZipOutputStream zipOut, String baseDir) throws IOException{
    File[] files = dir.listFiles();
    for (int i = 0; i < files.length; i++) {
      compress(files[i], zipOut, baseDir + dir.getName() + "/");
    }
  }

  /** 壓縮一個文件 */
  private static void compressFile(File file, ZipOutputStream zipOut, String baseDir) throws IOException{
    if (!file.exists()){
      return;
    }

    BufferedInputStream bis = null;
    try {
      bis = new BufferedInputStream(new FileInputStream(file));
      ZipEntry entry = new ZipEntry(baseDir + file.getName());
      zipOut.putNextEntry(entry);
      int count;
      byte data[] = new byte[BUFFER];
      while ((count = bis.read(data, 0, BUFFER)) != -1) {
        zipOut.write(data, 0, count);
      }

    }finally {
      if(null != bis){
        bis.close();
      }
    }
  }

3.解壓縮的實現:

public static void decompress(String zipFile , String dstPath)throws IOException{
    File pathFile = new File(dstPath);
    if(!pathFile.exists()){
      pathFile.mkdirs();
    }
    ZipFile zip = new ZipFile(zipFile);
    for(Enumeration entries = zip.getEntries();entries.hasMoreElements();){
      ZipEntry entry = (ZipEntry)entries.nextElement();
      String zipEntryName = entry.getName();
      InputStream in = null;
      OutputStream out = null;
      try{
        in = zip.getInputStream(entry);
        String outPath = (dstPath+"/"+zipEntryName).replaceAll("\\*", "/");;
        //判斷路徑是否存在,不存在則創建文件路徑
        File file = new File(outPath.substring(0, outPath.lastIndexOf('/')));
        if(!file.exists()){
          file.mkdirs();
        }
        //判斷文件全路徑是否為文件夾,如果是上面已經上傳,不需要解壓
        if(new File(outPath).isDirectory()){
          continue;
        }

        out = new FileOutputStream(outPath);
        byte[] buf1 = new byte[1024];
        int len;
        while((len=in.read(buf1))>0){
          out.write(buf1,0,len);
        }
      }
      finally {
        if(null != in){
          in.close();
        }

        if(null != out){
          out.close();
        }
      }
    }
  }

關于Java壓縮組件出現文件名亂碼如何解決就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

潍坊市| 阿图什市| 开阳县| 海门市| 淮南市| 盐城市| 保山市| 苍山县| 玉田县| 南木林县| 泌阳县| 浑源县| 上思县| 额敏县| 林口县| 博爱县| 敖汉旗| 拜泉县| 延寿县| 商丘市| 尉氏县| 仙桃市| 临清市| 浦城县| 淄博市| 临海市| 方正县| 吴堡县| 毕节市| 利津县| 曲麻莱县| 白水县| 鄢陵县| 隆尧县| 贺兰县| 云安县| 云和县| 得荣县| 大庆市| 广丰县| 金昌市|