我想要修改的文件是配置文件,大多是基于xml的。
我之所以对不解压缩感兴趣是因为该应用程序使用launch4j封装,如果我解压它,就无法再创建.exe文件。
你可以在 jar
命令中使用 u
选项。
来自 Java 教程:
jar uf jar-file input-file(s)
如果归档中已经存在与正在添加的文件相同路径名的文件,则会覆盖。
请参阅更新JAR文件。
比重新制作整个jar文件要好得多。也可以从程序内部调用此功能。尝试在Java中运行命令行
zip
,才能保存更改。感谢您的回答! - troigJava的jar文件与zip文件格式相同 - 因此,如果您拥有可以修改存档的zip文件实用程序,那么您就可以入门了。第二个问题是,如果您想重新编译一个类或其他内容,您可能只需要重新构建jar文件;但是文本文件或某些文件(例如xml)应该很容易进行修改。
众所周知,你无法在JAR文件中更改文件而不重新扫描JAR。如果使用Launch4J,情况更糟,必须在更改JAR后重新构建EXE。因此,请勿选择这种方法。
将配置文件放在JAR中通常是一个坏主意。这是我的建议:在一些预定的位置(如主目录、\Program Files\等)中搜索配置文件。如果找到配置文件,则使用它。否则,使用JAR中的文件作为备选项。如果这样做,您只需在预定位置编写配置文件,程序将自动获取它。
另一个好处是,如果升级软件,修改后的配置文件不会被覆盖。
不确定这是否有帮助,但您可以不必提取文件就进行编辑:
有关更多详细信息,请查看博客文章 http://vinurip.blogspot.com/2015/04/how-to-edit-contents-of-jar-file-on-mac.html
使用WinRAR提取jar文件,然后使用CAVAJ:
Cavaj Java反编译器是一款免费的图形化实用程序,可以从CLASS文件中重构Java源代码。
如果需要,这里有视频教程: https://www.youtube.com/watch?v=ByLUeem7680
是的,您可以使用SQLite从JAR文件内部读取或写入数据库,这样您就不必提取然后重新打包它,按照我的帖子http://shoaibinamdar.in/blog/?p=313进行操作。
使用语法“jdbc:sqlite::resource:”,您将能够从JAR文件内部读取和写入数据库。
为了扩展dfa所说的内容,原因是因为jar文件设置类似于zip文件。如果您想修改文件,则必须读取所有条目,修改要更改的条目,然后将条目写回jar文件中。我以前不得不这样做,那是我能找到的唯一方法。
编辑
请注意,这是使用Java内部jar文件编辑器,即文件流。我确定有一种方法可以做到这一点,您可以将整个jar读入内存,修改所有内容,然后写回到文件流中。我认为像7-Zip和其他实用程序正在执行的就是这样,因为我认为zip标头的ToC必须在写入时定义。但是,我可能是错的。