Я хочу изменить файл в моей банке. Можно ли сделать это из моего приложения без извлечения и повторной обработки?
Файл, который я хочу изменить, - это файлы конфигурации, в основном на основе xml.
Причина, по которой я заинтересован в том, чтобы не раздражать, заключается в том, что приложение обернуто с помощью launch4j, если я отключаю его, я не могу снова создать файл .exe.
Ответы:
Вы можете использовать
u
опцию дляjar
Из учебных пособий по Java:
«Любые файлы, уже находящиеся в архиве, имеющие тот же путь, что и добавляемый файл, будут перезаписаны».
См. Обновление файла JAR .
Намного лучше, чем делать всю банку заново. Вызов этого из вашей программы тоже возможен. Попробуйте запустить командную строку на Java
источник
Вы можете использовать Vim:
vim my.jar
Vim может редактировать сжатые текстовые файлы, если они есть
unzip
в вашей среде.источник
zip
в вашем окружении, чтобы иметь возможность сохранять изменения. Спасибо за ответ!Файлы jar в Java имеют тот же формат, что и zip-файлы, поэтому, если у вас есть утилита для zip-файлов, которая позволяет вам изменять архив, вы всегда готовы к работе. Вторая проблема заключается в том, что если вы хотите перекомпилировать класс или что-то в этом роде, вам, вероятно, просто придется пересобрать jar; но текстовый файл или что-то в этом роде (например, xml) должно быть достаточно легко модифицировано.
источник
Как многие уже говорили, вы не можете изменить файл в JAR, не обновляя JAR. С Launch4J дело обстоит еще хуже, вам нужно пересобрать EXE после изменения JAR. Так что не ходи по этому пути.
Как правило, размещение файлов конфигурации в JAR - плохая идея. Вот мое предложение. Найдите свой файл конфигурации в некоторых заранее определенных местах (например, в домашнем каталоге, \ Program Files \ и т. Д.). Если вы найдете файл конфигурации, используйте его. В противном случае используйте тот, который находится в JAR, как резервный. Если вы это сделаете, вам просто нужно записать файл конфигурации в заранее определенное место, и программа его подберет.
Еще одно преимущество этого подхода заключается в том, что измененный файл конфигурации не перезаписывается при обновлении программного обеспечения.
источник
Не уверен, что это поможет, но вы можете редактировать без извлечения:
Подробнее читайте в блоге http://vinurip.blogspot.com/2015/04/how-to-edit-contents-of-jar-file-on-mac.html.
источник
В краткосрочной перспективе это может оказаться больше работы, чем вы рассчитываете, но я подозреваю, что в долгосрочной перспективе для вас будет очень полезно изучить возможность использования Ant (или Maven , или даже Bazel ) вместо создания jar-файлов вручную. . Таким образом, вы можете просто щелкнуть файл ant (если вы используете Eclipse) и перестроить jar.
В качестве альтернативы вы можете вообще не иметь этих файлов конфигурации в банке - если вы ожидаете, что вам потребуется регулярно заменять эти файлы или если предполагается, что они будут распространяться среди нескольких сторон, файл конфигурации не должен быть частью банка на всех.
источник
Чтобы расширить то, что сказал dfa, причина в том, что файл jar настроен как zip-файл. Если вы хотите изменить файл, вы должны прочитать все записи, изменить ту, которую вы хотите изменить, а затем записать записи обратно в файл jar. Мне приходилось делать это раньше, и это был единственный способ сделать это.
РЕДАКТИРОВАТЬ
Обратите внимание, что здесь используются внутренние для Java редакторы файлов jar, которые являются файловыми потоками. Я уверен, что есть способ сделать это: вы можете прочитать всю банку в памяти, изменить все, а затем записать обратно в файловый поток. Я считаю, что это то, что делают такие утилиты, как 7-Zip и другие, поскольку я считаю, что ToC zip-заголовка должен быть определен во время записи. Однако я мог ошибаться.
источник
Да, вы можете, используя SQLite, вы можете читать или записывать в базу данных из файла jar, чтобы вам не пришлось извлекать, а затем повторно загружать его, следите за моим сообщением http://shoaibinamdar.in/blog/? р = 313
используя синтаксис «jdbc: sqlite :: resource:», вы сможете читать и записывать в базу данных из файла jar
источник
Проверьте TrueZip .
Он делает именно то, что вы хотите (редактировать файлы внутри файла jar), через API виртуальной файловой системы. Он также поддерживает вложенные архивы (jar внутри jar).
источник
Извлеките файл jar, например. с winrar и используйте CAVAJ:
Cavaj Java Decompiler - это бесплатная графическая утилита, которая восстанавливает исходный код Java из файлов CLASS.
вот видеоурок, если вам нужен: https://www.youtube.com/watch?v=ByLUeem7680
источник
Если этот файл не является .class, то есть файлом ресурсов или файлом манифеста - вы можете.
источник
Самый простой способ сделать это в Windows - использовать WinRAR :
источник
в большинстве ответов выше говорится, что вы не можете сделать это для файла класса.
Даже если вы хотите обновить файл класса, вы также можете это сделать. Все, что вам нужно сделать, это перетащить файл класса из рабочего пространства в jar.
Если вы хотите проверить свои изменения в файле класса, вы можете сделать это с помощью декомпилятора, такого как jd-gui.
источник