如何使用Java打开和编辑.jar文件?

5

如何打开并编辑.jar文件中的.xml文件?

我知道可以通过解压缩.jar文件来访问其中的.xml文件,但这可能会破坏原始文件。相反,您可以使用Java代码将.jar文件中的.xml文件读取到内存中,并对其进行编辑,然后将其写回.jar文件中。

InputStream myStream = this.getClass().getResourceAsStream("xmlData.xml");

你如何打开xmlData.xml,编辑文件,并将其保存在.jar中?我想知道这对我很有用,而且不想在.jar外部编辑文件...应用程序需要一直运行!

谢谢!


修改 XML 文件的应用程序是否在同一个 JAR 文件中作为 xmlData.xml? - Enrique
它们是同一个东西... .jar 文件内部有 .xml 文件... 我正在运行 .jar 文件,并希望 .jar 应用程序可以编辑其中的 .xml 文件 - Zeveso
2个回答

3
Jar文件只是带有不同文件后缀和命名约定的.zip文件。因此,使用位于java.util.zip下面的类来读取和/或写入内容。
修改内容不能保证(甚至不太可能)对正在运行的系统产生影响,因为类加载器可能会根据自己的需要缓存内容。
因此,最好更多地了解您实际上想要通过此操作实现什么目的。即时修改jar文件的内容听起来像是一种复杂且容易出错的方法...

我想将所有数据存储在.jar文件内部的.xml文件中...这些数据可能是姓名、电子邮件等。 - Zeveso
所以你正在将数据存储在.jar文件中的xml文件中?当你必须重新部署你的应用程序时会发生什么?假设你想继续使用XML。你应该考虑将.xml文件持久化到应用程序之外,并使用配置(可能通过.properties文件或Spring)来设置该xml文件在文件系统上的位置。应该保留.jars的内容,以确保二进制完整性等问题。 - whaley
1
我真的不认为这可以干净地完成。首先,您必须解决首先定位jar文件的问题(遍历类加载器树或检查java进程启动参数)。之后,您使用java.util.zip来解压缩文件,进行编辑和重新打包文件,然后祈祷类加载器缓存将读取您更新的文件。不应该这样做 :)。 - Mihai Toader
我要把它拿掉...它太麻烦了。 - Zeveso

1

如果您的应用程序具有图形用户界面并且可以访问网站/服务器,则JWS可能是您的答案。 JWS应用程序可用的JNLP API提供了PersistenceService等服务。 这里是一个小的 PersistenceService演示

想法是检查JWS持久性存储中的XML。 如果没有,写入其中,否则使用缓存版本。 如果更改,将新版本写入存储。

演示在关闭时写入存储,并在启动时读取。 但是,它也可以通过菜单项、定时器等来调用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接