我通过修改 Zip4j 解决了这个问题。我粗略地改变了哪种滥用静态,但它是在一个实用程序类中,所以我不太担心。
我在 Zip4jUtil 类中进行了以下更改,并使用一种方法创建了一个名为 ExemptFileHandler 的接口:
public boolean isExempt(File file);
然后在 Zip4jUtil 类中,我创建了以下静态对象:
private static ExemptFileHandler handler;
最后,我修改了getFilesInDirectoryRec
递归方法:
for(int i = 0; i < filesDirs.size(); i++) {
File file = (File)filesDirs.get(i);
if (file.isHidden() && !readHiddenFiles) {
return result;
}
if(handler == null || !handler.isExempt(file)) {
result.add(file);
if (file.isDirectory()) {
List deeperList = getFilesInDirectoryRec(file, readHiddenFiles);
result.addAll(deeperList);
}
}
}
现在,这使我能够免除文件和文件夹。这是一个粗略的修复。使用此修复程序,我一次只能创建一个压缩文件,除非我可以接受每个压缩文件的豁免文件相同。我可以进一步修改它,但这就是让它工作所需的全部内容,而且确实如此。