我创建了一个备用系统,我将其称为EasyBackup for servers。该系统运行良好,它使用压缩文件。有人要求我添加一个功能来为压缩文件夹添加密码,但我找不到使用Java的zip实用程序类的方法,所以我决定使用Zip4j。
Zip4j完美地添加了密码,但是当我添加文件夹时,它会添加所有文件和子文件夹。
我可以选择让用户免除文件和文件夹,因此我需要一种方法来保留此功能。
如何使用Zip4J豁免文件和文件夹。有没有办法手动添加文件夹和文件,以便不添加子项?
如果没有,修改Zip4J的源代码是否实用?还有另一个库已经这样做了吗?
答案 0 :(得分:0)
我通过修改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);
}
}
}
这使我可以免除文件和文件夹。这是一个粗略的修复。有了这个修复,我一次只能创建一个压缩文件,除非我对每个压缩文件的免除文件是相同的。我可以进一步修改它,但这就是我需要它才能使它工作,而且确实如此。