以下类从jdk的src.zip里提取
ZipConstants.java
ZipEntry.java
ZipOutputStream.java
eclipse中新建工程,放入上述三个文件
1.ZipOutputStream.java文件改名为CNZipOutputStream.java,class名称改为CNZipOutputStream,构造器名称改为CNZipOutputStream
2.新增member,这个member记录编码方式
private static String encoding="UTF-8";
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");
问题解决
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");
问题解决