Je voudrais modifier un fichier dans mon pot. Est-il possible de le faire sans extraire et remuer, à partir de mon application?
Les fichiers que je veux modifier sont des fichiers de configuration, principalement basés sur XML.
La raison pour laquelle je suis intéressé à ne pas être un jarring est que l'application est encapsulée avec launch4j si je unjar elle ne peut pas créer le fichier .exe à nouveau.
Vous pouvez utiliser l'option u
pour jar
À partir des tutoriels Java:
jar uf jar-file input-file(s)
"Tous les fichiers déjà dans l'archive ayant le même chemin d'accès qu'un fichier ajouté seront remplacés."
Voir Mise à jour d'un fichier JAR .
Bien mieux que de refaire tout le bocal. Invoquer cela depuis votre programme semble également possible. Essayez Exécuter la ligne de commande en Java
Vous pouvez utiliser Vim:
vim my.jar
Vim peut éditer des fichiers texte compressés, étant donné que vous avez unzip
dans votre environnement.
Les fichiers jar Java ont le même format que les fichiers Zip. Par conséquent, si vous utilisez un utilitaire de fichier Zip qui vous permettrait de modifier une archive, vous avez le pied dans le pied. Le deuxième problème est que, si vous voulez recompiler une classe ou quelque chose, vous devrez probablement reconstruire le fichier jar; mais un fichier texte ou quelque chose (XML, par exemple) devrait être assez facilement modifié.
Comme beaucoup l'ont dit, vous ne pouvez pas modifier un fichier dans un fichier JAR sans recanifier le fichier JAR. C'est encore pire avec Launch4J, vous devez reconstruire le fichier EXE une fois que vous modifiez le fichier JAR. Alors n'allez pas dans cette voie.
C'est généralement une mauvaise idée de mettre des fichiers de configuration dans le fichier JAR. Voici ma suggestion. Recherchez votre fichier de configuration dans des emplacements prédéterminés (tels que le répertoire de base,\Program Files\etc). Si vous trouvez un fichier de configuration, utilisez-le. Sinon, utilisez celui du fichier JAR comme solution de secours. Si vous faites cela, il vous suffit d'écrire le fichier de configuration à l'emplacement prédéterminé et le programme le récupérera.
Un autre avantage de cette approche est que le fichier de configuration modifié ne sera pas écrasé si vous mettez à niveau votre logiciel.
C’est peut-être plus de travail que ce que vous cherchez à faire à court terme, mais je pense qu’à long terme, il serait très bénéfique pour vous d’envisager d’utiliser Ant (ou Maven , ou même Bazel ) au lieu de construire le bocal manuellement. De cette façon, vous pouvez simplement cliquer sur le fichier ant (si vous utilisez Eclipse) et reconstruire le fichier jar.
Sinon, vous pouvez ne pas avoir ces fichiers de configuration dans le fichier .zar - si vous prévoyez de devoir les remplacer régulièrement, ou s’ils sont supposés être distribués à plusieurs, le fichier de configuration ne doit pas faire partie de le pot du tout.
Oui, vous pouvez utiliser SQLite pour lire ou écrire dans une base de données à partir du fichier jar, de manière à ce que vous n'ayez pas à l'extraire puis à la réécrire, suivez mon message http://shoaibinamdar.in/blog /? p = 313
en utilisant la syntaxe "jdbc: sqlite :: resource:" vous pourrez lire et écrire dans une base de données à partir du fichier jar
Découvrez TrueZip .
Il fait exactement ce que vous voulez (éditer des fichiers en ligne dans un fichier jar), via une API de système de fichiers virtuel. Il prend également en charge les archives imbriquées (jar dans un jar).
Pas sûr que cela aide, mais vous pouvez éditer sans extraire:
Consultez l'article du blog pour plus de détails http://vinurip.blogspot.com/2015/04/how-to-edit-contents-of-jar-file-on-mac.html
Pour développer ce que dfa a dit, la raison en est que le fichier jar est configuré comme un fichier Zip. Si vous souhaitez modifier le fichier, vous devez lire toutes les entrées, modifier celle que vous souhaitez modifier, puis réécrire les entrées dans le fichier jar. Je devais le faire avant, et c'était la seule façon pour moi de le faire.
MODIFIER
Notez que cela utilise les éditeurs de fichiers jar internes à Java, qui sont des flux de fichiers. Je suis sûr qu'il existe un moyen de le faire: vous pouvez lire le fichier dans son intégralité en mémoire, tout modifier, puis écrire dans un flux de fichiers. C’est ce que je pense que des utilitaires tels que 7-Zip et d’autres font, car je pense que la table des matières d’un en-tête Zip doit être définie au moment de l’écriture. Cependant, je peux me tromper.
Extraire le fichier jar pour ex. avec winrar et utiliser CAVAJ:
Cavaj Java Decompiler est un utilitaire graphique gratuit qui reconstruit le code source Java à partir de fichiers CLASS.
voici un didacticiel vidéo si vous avez besoin de: https://www.youtube.com/watch?v=ByLUeem7680
Le moyen le plus simple que j'ai trouvé de faire cela dans Windows est avec WinRAR :
Tant que ce fichier n'est pas un fichier .class, c'est-à-dire un fichier de ressources ou un fichier manifeste, vous le pouvez.