用java.util.zip制作zip壓縮文件時(shí),如果制作的壓縮文件有中文文件名或中文目錄,用WinZip、WinRar解壓時(shí)會(huì)有亂碼, 同樣,用java.util.zip解壓WinZip、WinRar打包的壓縮文件時(shí),中文也是亂碼,主要原因是因?yàn)閖ava.util.zip使用編碼和WinZip和WinRar使用的不同,在網(wǎng)上找了半天,發(fā)現(xiàn)只有兩種解決方法:
1、修改import java.util.zip.ZipInputStream和ZipOutputStream。
2、使用Apache Ant里提供的zip工具。
-------------------------------------
已找到解決方法,就是用Ant的zip來實(shí)現(xiàn),Ant里面可以指定編碼,而java.util.zip是寫死了的,只能用UTF-8,呵呵
-------------------------------
不要使用java.util.zip的包,用ant.jar放到classpath中
//在classpath中引入ant.jar的包
import java.io.*;?
import java.util.*;
import java.io.File;
import org.apache.tools.zip.*;
public? class? CDGGzip?
{?
? //boolean? packFrame? =? false;?
? private File srcPath =new File("d:"+File.separator+"邢曉寧");
? private String outFilename=new String("d:"+File.separator+"邢曉寧.zip");
private int len=srcPath.listFiles().length;
private String[] filenames = new String[len];
public void setSrcPath(String src){
?? srcPath=new File(src);
? }
? public File getSrcPath(){
? return srcPath;
? }
public void setOutFilename(String out){
?? outFilename=out;
? }
? public String getOutFilename(){
? return outFilename;
? }?
? public void gzip(){
byte[] buf = new byte[1024];
? try {
? File[]? files? =? srcPath.listFiles();
? for(int? i=0;i<len;i++)
? {
? //if(!files[i].isDirectory())
filenames[i]=srcPath.getPath()+File.separator+files[i].getName();
}
? ZipOutputStream out = new ZipOutputStream(new FileOutputStream(outFilename));
? for (int i=0; i<filenames.length; i++)
? {
? FileInputStream in = new FileInputStream(filenames[i]);
? out.putNextEntry(new org.apache.tools.zip.ZipEntry(files[i].getName()));
? int len;
? while ((len = in.read(buf)) > 0)
? {
? out.write(buf, 0, len);
? }
? out.closeEntry();
? in.close();
????? }
????? out.close();
??? }
??? catch (IOException e)
??? {
??? System.out.println(e);
??? }
? }
?
? public static void main(String arg[]){
? CDGGzip cdggzip=new CDGGzip();
? cdggzip.gzip();
? }
?
}
posted on 2006-05-29 19:08
MyJavaWorld 閱讀(432)
評(píng)論(0) 編輯 收藏