我想修改我的罐子裏面的文件。在我的應用程序中,是否可以在不提取和重新激勵的情況下執行此操作?修改罐子裏的文件
我想修改的文件是配置文件,主要是基於xml的。
我感興趣的原因不是不合理的是,應用程序包裝與launch4j如果我unjar它我不能再次創建.exe文件。
我想修改我的罐子裏面的文件。在我的應用程序中,是否可以在不提取和重新激勵的情況下執行此操作?修改罐子裏的文件
我想修改的文件是配置文件,主要是基於xml的。
我感興趣的原因不是不合理的是,應用程序包裝與launch4j如果我unjar它我不能再次創建.exe文件。
只要此文件不是.class,即資源文件或清單文件 - 您可以。
和如何,沒有提取和重新震動? – 2011-08-25 11:42:27
Java jar文件與zip文件的格式相同 - 所以如果你有一個zip文件實用程序可以讓你修改一個存檔文件,那麼你的腳就在門外。第二個問題是,如果你想重新編譯一個類或其他東西,你可能只需要重新構建jar;但是一個文本文件或者其他東西(例如xml)應該很容易修改。
爲了擴展dfa的說法,原因是因爲jar文件是像zip文件一樣設置的。如果要修改文件,則必須讀出所有條目,修改要更改的條目,然後將條目寫回jar文件。之前我必須這樣做,而這是我能找到的唯一方法。
編輯
注意,這是使用內部到Java jar文件的編輯,這是文件流。我確信有辦法做到這一點,你可以將整個jar讀入內存,修改所有內容,然後寫回到文件流。這就是我相信像7-Zip和其他公用事業公司這樣的公用事業公司,因爲我相信在寫入時必須定義zip頭的ToC。但是,我可能是錯的。
這可能比你想要在短期內處理更多的工作,但我認爲從長遠來看,使用Ant(或Maven,或甚至Bazel)將對你有幫助建立罐子的手動。這樣你只需點擊ant文件(如果你使用Eclipse)並重建jar。
或者,您可能實際上並不需要在jar中包含這些配置文件 - 如果您期望需要定期替換這些文件,或者它應該分發給多方,配置文件應該根本不是罐子的一部分。
同意。但是,您可能希望在JAR中放置一個「默認」配置文件,因此如果外部設備發生某些事情(損壞,刪除等),您可以回退到默認配置。 – 2009-08-03 22:16:22
真的 - 雖然我不知道有多少應用程序將繼續運作,沒有他們的配置文件... – dimo414 2009-08-03 23:30:25
正如許多人所說的那樣,如果不重新編寫JAR文件,就不能更改JAR中的文件。 Launch4J更糟糕,您必須在更改JAR後重新編譯EXE。所以不要走這條路。
將配置文件放入JAR通常是個壞主意。這是我的建議。在某些預定位置(如主目錄,\ Program Files \ etc)中搜索您的配置文件。如果您找到配置文件,請使用它。否則,使用JAR中的那個作爲後備。如果你這樣做,你只需要在預定位置寫入配置文件,程序就會把它提取出來。
此方法的另一個好處是,如果升級軟件,修改的配置文件不會被覆蓋。
是的,你可以使用SQLite您可以閱讀或jar文件內寫入到數據庫中,這樣你就不必提取,然後重新罐子,請按照我的帖子http://shoaibinamdar.in/blog/?p=313
使用語法「jdbc:sqlite :: resource:」您可以從jar文件中讀取和寫入數據庫
檢出TrueZip。
它通過虛擬文件系統API完全符合你的要求(在jar文件內部編輯文件)。它也支持嵌套存檔(罐子裏面的jar)。 「在具有相同的路徑名添加將被覆蓋文件存檔的任何文件了。」
jar uf jar-file input-file(s)
:
提取ex文件的jar文件。使用winrar並使用CAVAJ:
Cavaj Java Decompiler是一個圖形化的免費軟件實用程序,用於重建CLASS文件中的Java源代碼。
這裏是視頻教程,如果您需要: https://www.youtube.com/watch?v=ByLUeem7680
不知道這是否幫助,但你可以不提取編輯:
檢查的博客文章瞭解更多詳情 http://vinurip.blogspot.com/2015/04/how-to-edit-contents-of-jar-file-on-mac.html
您可以用Vim:
vim my.jar
的Vim能編輯壓縮的文本文件,給您的環境中有unzip
。
我發現這樣做在Windows的最簡單方法是使用WinRAR:
你爲什麼想這麼做? – 2009-08-03 21:57:30
我想在應用程序中保留補充文件,而不在文件系統上創建臨時文件。 – 2009-08-03 22:02:09
試試這個解決方案http://stackoverflow.com/a/4837522/1853864 我用了,我的問題解決了。 – 2012-11-28 12:22:09