/**
* 测试
* @param args
*/
public static void main(String[] args) {
/**
* 压缩测试
* 可以传文件或者目录
*/
// zip("M:\\ZIP\\test\\bb\\a\\t.txt", "M:\\ZIP\\test\\temp1.zip", "zyh");
// zip("M:\\ZIP\\test\\bb", "M:\\ZIP\\test\\temp2.zip", "zyh");
unzip("M:\\ZIP\\test\\temp2.zip", "M:\\ZIP\\test\\temp", "zyh");
}
}
压缩多个文件时,有两个方法(第一种没试):
(1) 预先把多个文件压缩成zip,然后调用enc.addAll(inZipFile, password);方法将多个zip文件加进来。
(2)针对需要压缩的文件循环调用enc.add(inFile, password);,每次都用相同的密码。
修改源码后的项目可到上面提到的博客去下载,或者参照博客自己修改,其实也很容易,毕竟只有几处改动。
另外我的CSDN下载频道也上传了修改后的源码和jar包,也可以去那里下载。
修改记录
需要修改的文件有:
ExtZipOutputStream
ExtZipEntry
AesZipFileEncrypter
在ExtZipOutputStream里增加一成员变量并添加两个方法:
protected String encoding = "iso-8859-1";
public boolean utf8Flg = false;
public void setEncoding(String encoding) {
this.encoding = encoding;
utf8Flg |= isUTF8(encoding);
}
protected boolean isUTF8(String encoding) {
if (encoding == null) {
// check platform's default encoding
encoding = System.getProperty("file.encoding");
}
return "UTF8".equalsIgnoreCase(encoding)
|| "UTF-8".equalsIgnoreCase(encoding);
}
然后将ExtZipOutputStream的(134行和158行左右)iso-8859-1编码替换成上面设置的编码格式
接着,再将106行左右文件名长度取得代码改成:
writeShort(entry.getName().getBytes(encoding).length); // file name length