这段代码可以解决中文zip和zip包中的文件也是中文的问题
importjava.io.BufferedInputStream;importjava.io.BufferedOutputStream;importjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importorg.apache.tools.zip.ZipFile;public classunzipandrar {/*** 解压zip格式的压缩文件到指定位置
*@paramzipFileName 压缩文件
*@paramextPlace 解压目录
*@throwsException*/@SuppressWarnings("unchecked")public synchronized voidunzip(String zipFileName, String extPlace){try{
(newFile(extPlace)).mkdirs();
File f= newFile(zipFileName);
ZipFile zipFile= newZipFile(zipFileName);if((!f.exists()) && (f.length() <= 0)) {throw new Exception("要解压的文件不存在!");
}
String strPath, gbkPath, strtemp;
File tempFile= newFile(extPlace);
strPath=tempFile.getAbsolutePath();
java.util.Enumeration e=zipFile.getEntries();while(e.hasMoreElements()){
org.apache.tools.zip.ZipEntry zipEnt=(org.apache.tools.zip.ZipEntry)e.nextElement();
gbkPath=zipEnt.getName();if(zipEnt.isDirectory()){
strtemp= strPath + File.separator +gbkPath;
File dir= newFile(strtemp);
dir.mkdirs();continue;
}else{//读写文件
InputStream is =zipFile.getInputStream(zipEnt);
BufferedInputStream bis= newBufferedInputStream(is);
gbkPath=zipEnt.getName();
strtemp= strPath + File.separator +gbkPath;//建目录
String strsubdir =gbkPath;for(int i = 0; i < strsubdir.length(); i++) {if(strsubdir.substring(i, i + 1).equalsIgnoreCase("/")) {
String temp= strPath + File.separator + strsubdir.substring(0, i);
File subdir= newFile(temp);if(!subdir.exists())
subdir.mkdir();
}
}
FileOutputStream fos= newFileOutputStream(strtemp);
BufferedOutputStream bos= newBufferedOutputStream(fos);intc;while((c = bis.read()) != -1) {
bos.write((byte) c);
}
bos.close();
fos.close();
}
}
}catch(Exception e) {
e.printStackTrace();try{throwe;
}catch(Exception e1) {//TODO Auto-generated catch block
e1.printStackTrace();
}
}
}