使用Java中的Zip4j免除文件和文件夹

时间:2018-04-03 17:57:17

标签: java zip zip4j

我创建了一个备用系统,我将其称为EasyBackup for servers。该系统运行良好,它使用压缩文件。有人要求我添加一个功能来为压缩文件夹添加密码,但我找不到使用Java的zip实用程序类的方法,所以我决定使用Zip4j

Zip4j完美地添加了密码,但是当我添加文件夹时,它会添加所有文件和子文件夹。

我可以选择让用户免除文件和文件夹,因此我需要一种方法来保留此功能。

如何使用Zip4J豁免文件和文件夹。有没有办法手动添加文件夹和文件,以便不添加子项?

如果没有,修改Zip4J的源代码是否实用?还有另一个库已经这样做了吗?

1 个答案:

答案 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);
        }
    }
}

这使我可以免除文件和文件夹。这是一个粗略的修复。有了这个修复,我一次只能创建一个压缩文件,除非我对每个压缩文件的免除文件是相同的。我可以进一步修改它,但这就是我需要它才能使它工作,而且确实如此。