關於使用java內建ZipOutputStream壓縮檔名為中文的亂碼問題

來源:互聯網
上載者:User

標籤:亂碼   apache   壓縮檔   java6   

摘要
由於業務要求,會對檔案系統中部分檔案處理打包操作,開始我使用java6內建的api處理,當檔案名稱中帶有中時,打包之後的壓縮檔會產生中文亂碼的問題,後聽說java7解決了這一問題,因行業的滯後性我沒有做這樣的嘗試,有興趣的讀者可以自己研究一下。下面提供我的一個解決方案(apache下檔案流工具)。

  • step1:引入jar包
    http://central.maven.org/maven2/org/apache/ant/ant/1.7.1/ant-1.7.1.jar

  • step2:代碼範例

//部分包引入範例import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.ArrayList;import java.util.Enumeration;import java.util.List;import org.apache.log4j.Logger;import org.apache.tools.zip.ZipEntry;import org.apache.tools.zip.ZipFile;import org.apache.tools.zip.ZipOutputStream;public class ZipUtil {    private static final Logger logger = Logger.getLogger(ZipUtil.class);    /**      * 功能:壓縮多個檔案成一個zip檔案      * @param srcfile:源檔案清單      * @param zipfile:壓縮後的檔案      */      public static boolean zipFiles(File[] srcfile,File zipfile){          boolean reFlag = false;        byte[] buf=new byte[10240];          ZipOutputStream out = null;        FileInputStream in = null;        try {              //ZipOutputStream類:完成檔案或檔案夾的壓縮              out=new ZipOutputStream(new FileOutputStream(zipfile));              //注意此處編碼設定            out.setEncoding("gbk");            for(int i=0;i<srcfile.length;i++){                  in=new FileInputStream(srcfile[i]);                  out.putNextEntry(new ZipEntry(srcfile[i].getName()));                  int len;                  while((len=in.read(buf))>0){                      out.write(buf,0,len);                  }                  out.closeEntry();                  in.close();                  in = null;            }              out.close();              out = null;            reFlag = true;            logger.info("壓縮完成,檔案詳細資料為:"+zipfile.getAbsolutePath());        } catch (Exception e) {              e.printStackTrace();          } finally{            if(in!=null){                try {                    in.close();                    in = null;                } catch (IOException e) {                    e.printStackTrace();                }            }            if(out!=null){                try {                    out.close();                    out = null;                } catch (IOException e) {                    e.printStackTrace();                }            }        }         return reFlag;    }    }

關於使用java內建ZipOutputStream壓縮檔名為中文的亂碼問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.