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

Exempt files and folder with Zip4j in Java

我为服务器创建了一个名为 EasyBackup 的备份系统。该系统运行良好,并且使用压缩文件。有人要求我添加一个功能来为压缩文件夹添加密码,但我找不到使用 Java 的压缩实用程序 类 的方法,所以我决定使用 [=11] =].

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

我有一个选项供用户免除文件和文件夹,因此我需要一种方法来保留此功能。

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

如果没有,修改 Zip4J 的源代码是否可行?是否已经有其他图书馆这样做了?

我通过修改 Zip4j 解决了这个问题。我做了一个粗略的改变,它是一种滥用静态的,但它在一个实用程序中 class,所以我不太担心。

我在 Zip4jUtil class 中进行了以下更改,并使用一种方法创建了一个名为 ExemptFileHandler 的接口:

public boolean isExempt(File file);

然后在 Zip4jUtil class 我制作了以下静态对象:

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

现在我可以免除文件和文件夹。这是一个粗略的修复。通过此修复,我一次只能创建一个压缩文件,除非我同意每个压缩文件的豁免文件相同。我可以进一步修改它,但这就是让它工作所需的全部,它确实如此。