修改jar中的文件

我想修改我的jar里面的文件。 是否有可能做到这一点,而不是从我的应用程序中提取和重新打乱?

我想修改的文件是configuration文件,主要是基于xml的。

我不感兴趣的原因是应用程序包装与launch4j如果我unjar它我不能再次创build.exe文件。

您可以使用jaru选项

从Java教程:

 jar uf jar-file input-file(s) 

“档案中已有的文件与被添加的文件具有相同的path名称将被覆盖。”

请参阅更新JAR文件 。

比再次制作整个jar子好多了。 从你的程序中调用这个声音听起来也是可能的。 尝试在Java中运行命令行

Java jar文件与zip文件的格式相同 – 所以如果你有一个zip文件实用程序可以让你修改一个存档文件,那么你的脚就在你的脚下。 第二个问题是,如果你想重新编译一个类或什么的,你可能只需要重新构buildjar; 但是一个文本文件或者一些东西(例如xml)应该很容易修改。

正如许多人所说的,不能在不重新编写JAR的情况下更改JAR中的文件。 Launch4J更糟糕,您必须在更改JAR后重新编译EXE。 所以不要走这条路。

将configuration文件放入JAR通常是个好主意。 这是我的build议。 在某些预定位置(如主目录,\ Program Files \ etc)中search您的configuration文件。 如果您findconfiguration文件,请使用它。 否则,使用JAR中的那个作为后备。 如果你这样做,你只需要在预定的位置写入configuration文件,程序就会把它提取出来。

这种方法的另一个好处是,如果升级软件,修改的configuration文件不会被覆盖。

你可以使用Vim:

vim my.jar

Vim能够编辑压缩的文本文件,因为您已经在您的环境中unzip

这可能比你想要在短期内处理更多的工作,但我认为从长远来看,使用Ant (或Maven ,甚至Bazel )而不是手动构buildjar是非常有益的。 这样,你可以点击ant文件(如果你使用Eclipse)并重buildjar。

或者,您可能实际上并不需要将这些configuration文件放在jar文件中 – 如果您希望定期更换这些文件,或者它应该分发给多方,则configuration文件不应该成为这个jar子。

为了扩展dfa所说的,原因是因为jar文件被设置为一个zip文件。 如果要修改文件,则必须读出所有条目,修改要更改的条目,然后将条目写回到jar文件中。 以前我不得不这样做,那是我能find的唯一办法。

编辑

请注意,这是使用内部的Java jar文件编辑器,这是文件stream。 我相信有办法做到这一点,你可以将整个jar读入内存,修改所有内容,然后写回到文件stream。 这是我相信像7-Zip和其他公用事业公司这样做的事情,因为我相信一个zip头的ToC必须在写入时进行定义。 但是,我可能是错的。

是的,你可以,使用SQLite,你可以从jar文件中读取或写入数据库,这样你就不必提取,然后重新jar文件,请按照我的posthttp://shoaibinamdar.in/blog/? p = 313

使用语法“jdbc:sqlite :: resource:”,您将能够从jar文件中读取和写入数据库

看看TrueZip 。

它通过一个虚拟文件系统API来完成你想要的(在一个jar文件内部编辑文件)。 它也支持嵌套的归档(jar子里面的jar)。

为ex提取jar文件 与winrar和使用CAVAJ:

Cavaj Java Decompiler是一个graphics化的免费软件工具,可以从CLASS文件中重buildJava源代码。

这里是video教程,如果你需要: https : //www.youtube.com/watch?v=ByLUeem7680

不知道这是否有帮助,但你可以编辑而不提取:

  1. 从vi编辑器打开jar文件
  2. 从列表中select要编辑的文件
  3. 按回车打开文件做换器,并保存它很简单

查看博客文章http://vinurip.blogspot.com/2015/04/how-to-edit-contents-of-jar-file-on-mac.html

只要这个文件不是.class,即资源文件或清单文件 – 你可以。

我发现在Windows中最简单的方法是使用WinRAR :

  1. 右键单击该文件,然后从上下文菜单中select“使用WinRAR打开”。
  2. 导航到要编辑的文件并双击它以在默认编辑器中打开它。
  3. 进行更改后,保存并退出编辑器。
  4. 然后会出现一个对话框,询问您是否要更新存档中的文件 – select“是”,JAR将被更新。