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