Java檔名包含中文的檔案壓縮後文件名亂碼問題,完美解決方案
ZipConstants.java
ZipEntry.java
ZipOutputStream.java
eclipse中新建工程,放入上述三個檔案
1.ZipOutputStream.java檔案改名為CNZipOutputStream.java,class名稱改為CNZipOutputStream,構造器名稱改為CNZipOutputStream
2.新增member,這個member記錄編碼方式
private static String encoding="UTF-8";
3.新增構造器(可以讓這個class在new的時候,設定檔名的編碼)
public CNZipOutputStream(OutputStream out,String encoding) {
this(out);
this.encoding=encoding;
}
4.getUTF8Bytes(String a)方法的最前面加上如下程式碼
try{
if (s!=null&&s!=""&&!encoding.toUpperCase().equals("UTF-8")){
return s.getBytes(encoding);
}
}catch(Exception byteE){
}
5.在ZipEntry類中找到initIDs()靜態塊和構造器(如下),註釋掉
static
{
Zip library is loaded from System.initializeSystemClass
initIDs();
}
8.右鍵專案-->Export-->Java-->JAR file-->選擇輸出路徑,寫好包名(CNZip.jar)-->finish
將打好的jar包匯入工程,引入程式(注意:程式中要使用剛才新打的包,千萬不要導成jdk自帶的包)
9.將壓縮方法 zip(CNZipOutputStream out, File f, String base)中的 out.putNextEntry(new org.apache.tools.zip.ZipEntry(base))改為 out.putNextEntry(new ZipEntry(base))
10.打包時的輸出流改為 out = new CNZipOutputStream(new FileOutputStream(zipFileName),"gbk");
問題解決