Ich möchte eine Datei in meinem Glas ändern. Ist es möglich, dies aus meiner Anwendung heraus zu extrahieren und erneut zu erschüttern?
Datei, die ich ändern möchte, sind Konfigurationsdateien, meistens XML-basiert.
Der Grund, warum ich daran interessiert bin, nicht zu stören, ist, dass die Anwendung mit launch4j verpackt ist. Wenn ich sie entpacke, kann ich die EXE-Datei nicht erneut erstellen.
Antworten:
Sie können die
u
Option für verwendenjar
Aus den Java-Tutorials:
"Alle Dateien, die sich bereits im Archiv befinden und denselben Pfadnamen wie eine hinzugefügte Datei haben, werden überschrieben."
Siehe Aktualisieren einer JAR-Datei .
Viel besser als das ganze Glas noch einmal zu machen. Das Aufrufen aus Ihrem Programm heraus klingt ebenfalls möglich. Versuchen Sie, die Befehlszeile in Java auszuführen
quelle
Sie können Vim verwenden:
vim my.jar
Vim kann komprimierte Textdateien bearbeiten, sofern Sie diese
unzip
in Ihrer Umgebung haben.quelle
zip
in Ihrer Umgebung die Änderungen speichern können. Danke für die Antwort!Java-JAR-Dateien haben dasselbe Format wie Zip-Dateien. Wenn Sie also ein Zip-Datei-Dienstprogramm haben, mit dem Sie ein Archiv ändern können, haben Sie Ihren Fuß in der Tür. Das zweite Problem ist, wenn Sie eine Klasse oder etwas neu kompilieren möchten, müssen Sie wahrscheinlich nur das Glas neu erstellen. Eine Textdatei oder etwas anderes (z. B. XML) sollte jedoch leicht genug geändert werden können.
quelle
Wie viele gesagt haben, können Sie eine Datei in einer JAR nicht ändern, ohne die JAR erneut zu scannen. Mit Launch4J ist es noch schlimmer. Sie müssen die EXE neu erstellen, sobald Sie die JAR ändern. Gehen Sie also nicht diesen Weg.
Es ist im Allgemeinen eine schlechte Idee, Konfigurationsdateien in die JAR zu legen. Hier ist mein Vorschlag. Suchen Sie an einigen festgelegten Speicherorten nach Ihrer Konfigurationsdatei (z. B. Ausgangsverzeichnis, \ Programme \ usw.). Wenn Sie eine Konfigurationsdatei finden, verwenden Sie diese. Verwenden Sie andernfalls die in der JAR als Fallback. In diesem Fall müssen Sie nur die Konfigurationsdatei an den festgelegten Speicherort schreiben, und das Programm nimmt sie auf.
Ein weiterer Vorteil dieses Ansatzes besteht darin, dass die geänderte Konfigurationsdatei nicht überschrieben wird, wenn Sie Ihre Software aktualisieren.
quelle
Nicht sicher, ob diese Hilfe, aber Sie können bearbeiten, ohne zu extrahieren:
Weitere Informationen finden Sie im Blog-Beitrag unter http://vinurip.blogspot.com/2015/04/how-to-edit-contents-of-jar-file-on-mac.html
quelle
Dies mag mehr Arbeit sein, als Sie kurzfristig erledigen möchten, aber ich vermute, dass es auf lange Sicht sehr vorteilhaft für Sie wäre, Ant (oder Maven oder sogar Bazel ) zu verwenden, anstatt die Gläser manuell zu bauen . Auf diese Weise können Sie einfach auf die Ant-Datei klicken (wenn Sie Eclipse verwenden) und das JAR neu erstellen.
Alternativ möchten Sie diese Konfigurationsdateien möglicherweise überhaupt nicht im JAR haben. Wenn Sie damit rechnen, diese Dateien regelmäßig ersetzen zu müssen, oder wenn sie an mehrere Parteien verteilt werden sollen, sollte die Konfigurationsdatei nicht Teil dieser Datei sein das Glas überhaupt.
quelle
Der Grund dafür ist, dass die JAR-Datei wie eine Zip-Datei eingerichtet ist. Wenn Sie die Datei ändern möchten, müssen Sie alle Einträge auslesen, den zu ändernden ändern und die Einträge dann zurück in die JAR-Datei schreiben. Ich musste das schon einmal machen, und das war der einzige Weg, den ich finden konnte, um es zu tun.
BEARBEITEN
Beachten Sie, dass hierfür die internen Java-JAR-Dateibearbeitungsprogramme verwendet werden, bei denen es sich um Dateistreams handelt. Ich bin mir sicher, dass es eine Möglichkeit gibt, das gesamte Glas in den Speicher einzulesen, alles zu ändern und dann wieder in einen Dateistream zu schreiben. Ich glaube, dass Dienstprogramme wie 7-Zip und andere dies tun, da ich glaube, dass die ToC eines Zip-Headers zum Zeitpunkt des Schreibens definiert werden muss. Ich könnte mich jedoch irren.
quelle
Ja, mit SQLite können Sie aus der JAR-Datei aus einer Datenbank lesen oder in eine Datenbank schreiben, damit Sie sie nicht extrahieren und dann erneut jargen müssen. Folgen Sie meinem Beitrag http://shoaibinamdar.in/blog/? p = 313
Mit der Syntax "jdbc: sqlite :: resource:" können Sie aus der JAR-Datei heraus in eine Datenbank lesen und schreiben
quelle
Schauen Sie sich TrueZip an .
Über eine virtuelle Dateisystem-API wird genau das getan, was Sie möchten (um Dateien in einer JAR-Datei inline zu bearbeiten). Es unterstützt auch verschachtelte Archive (Glas in Glas).
quelle
JAR-Datei zum Beispiel extrahieren. mit winrar und benutze CAVAJ:
Cavaj Java Decompiler ist ein grafisches Freeware-Dienstprogramm, das Java-Quellcode aus CLASS-Dateien rekonstruiert.
Hier ist ein Video-Tutorial, wenn Sie Folgendes benötigen: https://www.youtube.com/watch?v=ByLUeem7680
quelle
Solange diese Datei nicht .class ist, dh Ressourcendatei oder Manifestdatei, können Sie.
quelle
Der einfachste Weg, dies in Windows zu tun, ist mit WinRAR :
quelle