如何在java中以务实的方式从jar中删除特定的文件/文件夹

Tom*_*Tom 5 java jar unjar

如何在 java 中以务实的方式从 jar 中删除特定的文件/文件夹。

我有一个 jar ABC.jar 包含文件、文件夹和另一个 jars 说 child.jar。在 child.jar 下我想删除一个特定的文件。我能怎么做?这样我的 ABC.jar 结构保持不变。

任何帮助将不胜感激。

提前致谢。

icz*_*cza 0

Jar/zip 文件不可编辑。您无法从 jar/zip 文件中删除条目。

您可以做的是“重新创建”jar 文件,如下所示:启动一个新的 jar 文件,迭代当前 jar 文件的条目,并将这些条目添加到您不想删除的新 jar 文件中。


理论上,可以删除这样的条目(但标准 Java 库不适合这样做,即ZipFile, ZipInputStream, JarFile,JarInputStream类):

jar/zip 文件中的条目是连续的。每个条目都有一个标题,其中包含有关该条目的信息(可能是文件或文件夹条目)。该标头还包含条目的字节长度。因此,您可以按顺序迭代这些条目,如果您遇到要删除的条目(并且您从其标题中知道其大小),您可以将文件的剩余部分(该条目之后的内容)复制到该条目的开头当前条目(显然文件大小应该被当前/删除条目的长度截断)。


或者您的其他选择包括不通过 Java 执行此操作,而是使用命令本身等外部工具zip -d