Java解压和压缩带密码的zip文件(2)

/**
  * 测试
  * @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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/2959b7a20460fcce098f268070ed3188.html