是否可以在不创建全新文件的情况下修改 .jar 文件? [复制]

Posted

技术标签:

【中文标题】是否可以在不创建全新文件的情况下修改 .jar 文件? [复制]【英文标题】:Is it possible to modify a .jar file without create a whole new one? [duplicate] 【发布时间】:2015-03-04 23:29:03 【问题描述】:

我正在开发一个 Java 应用程序。本质上,它会选择一个.jar 文件,然后将一些文件插入其中。

我正在使用来自Updating .JAR's contents from code 的答案。但是,它很慢,因为它实际上是创建一个全新的文件并手动将所有文件(包括旧文件)复制到其中!

我觉得这很奇怪。不创建一个全新的文件就不能修改.jar 文件吗?

【问题讨论】:

您可以使用7-Zip 在 JAR 中添加和删除文件。它只是一个 ZIP 文件。 我认为没有外部库是不可能的 jar 文件只是档案。然后,您可以使用与 tar 相同的语法进行提取和创建。 jar -xvf , jar -cvf 等.. @Chloe:使用 Java... 【参考方案1】:

没有。这是一个 ZIP 文件,这些文件本质上是顺序的。所有更新它们的工具都是通过复制来完成的,您也必须这样做。

【讨论】:

不正确:superuser.com/questions/647674/… @DonaldW 这个问题甚至不相关:它是关于编辑单个文件而不是添加新文件,这就是这个问题的意义所在。而且我没有看到任何与此答案相矛盾的东西,只是使用了工具,它们的行为与我上面描述的一样。 “所有更新它们的工具都通过复制来实现这一点”的说法是完全不正确的。 ***.com/questions/2223434/… @DonaldW 我没有看到任何实际证据,除了几个与我一致并给出令人信服的理由的陈述,例如目录位于文件末尾。您不知道这些虚拟化 API 在幕后是如何工作的。重新编辑单个文件还需要考虑目录中的 CRC。 我成功地更新了一个 .JAR 文件,而无需复制它或重新创建其内容。我使用了 Java 的 Zip 文件系统:docs.oracle.com/javase/7/docs/technotes/guides/io/fsp/…

以上是关于是否可以在不创建全新文件的情况下修改 .jar 文件? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在不重写的情况下将数据添加到文件中?

是否可以在不替换的情况下以编程方式修改/更新 plist 文件?

是否可以在不重写历史记录的情况下精简 .git 存储库?

Pandas 可以在不修改文件其余部分的情况下读取和修改单个 Excel 文件工作表(选项卡)吗?

如何在不接触该目录中的文件的情况下查找文件夹更改(使用 Windows 和 C++)

是否可以在不使用浏览器插件的情况下修改链接目标的 html?