Подтвердить что ты не робот

Изменение файла в банке

Я хотел бы изменить файл внутри моей банки. Возможно ли это сделать без извлечения и повторения из моего приложения?

Файл, который я хочу изменить, - это файлы конфигурации, в основном основанные на xml.

Причина, по которой я не заинтересован в том, что приложение обернуто с помощью start4j, если я его unjar, я больше не могу создать файл .exe.

4b9b3361

Ответ 1

Вы можете использовать опцию u для jar

Из учебных пособий Java:

jar uf jar-file input-file(s)

"Любые файлы, уже находящиеся в архиве, имеющие тот же путь, что и добавляемый файл, будут перезаписаны".

См. Обновление файла JAR.

Гораздо лучше, чем сделать всю банку снова и снова. Вызов этого из вашей программы тоже звучит. Попробуйте Запуск командной строки в Java

Ответ 2

Файлы jar Java имеют тот же формат, что и zip файлы, поэтому, если у вас есть утилита zip файла, которая позволит вам изменять архив, у вас есть нога в дверях. Вторая проблема заключается в том, что если вы хотите перекомпилировать класс или что-то еще, вам, вероятно, просто придется перестроить банку; но текстовый файл или что-то (xml, например) должно быть достаточно легко изменено.

Ответ 3

Вы можете использовать Vim:

vim my.jar

Vim может редактировать сжатые текстовые файлы, учитывая, что у вас есть unzip в вашей среде.

Ответ 4

Как говорили многие, вы не можете изменить файл в JAR без повторного использования JAR. Это еще хуже с Launch4J, вам нужно перестроить EXE, как только вы измените JAR. Так что не ходите по этому маршруту.

В целом плохая идея поместить файлы конфигурации в JAR. Вот мое предложение. Найдите свой файл конфигурации в некоторых заранее определенных местах (например, домашний каталог, \Program Files\и т.д.). Если вы найдете файл конфигурации, используйте его. В противном случае используйте один в JAR как резерв. Если вы это сделаете, вам просто нужно написать файл конфигурации в предварительно определенном месте, и программа подберет его.

Другим преимуществом такого подхода является то, что измененный файл конфигурации не перезаписывается, если вы обновляете свое программное обеспечение.

Ответ 5

Это может быть больше работы, чем вы планируете иметь дело в краткосрочной перспективе, но я подозреваю, что в долгосрочной перспективе вам будет очень полезно изучить Ant (или Maven, или даже Bazel) вместо того, чтобы создавать банку вручную. Таким образом, вы можете просто щелкнуть по файлу ant (если вы используете Eclipse) и перестроить банку.

В качестве альтернативы вы можете вообще не иметь этих файлов конфигурации в банке - если вы ожидаете, что вам придется регулярно заменять эти файлы или если он должен быть распространен несколькими сторонами, файл конфигурации не должен быть частью банки вообще.

Ответ 6

Чтобы расширить то, что сказал dfa, причина в том, что файл jar настроен как zip файл. Если вы хотите изменить файл, вы должны прочитать все записи, изменить тот, который хотите изменить, а затем записать записи обратно в файл jar. Я должен был сделать это раньше, и это был единственный способ найти это.

ИЗМЕНИТЬ

Обратите внимание, что это использование внутренних редакторов jar файлов Java, которые являются файловыми потоками. Я уверен, что есть способ сделать это, вы можете прочитать всю банку в памяти, изменить все, а затем записать обратно в поток файлов. Это то, что я считаю утилизациями, такими как 7-Zip и другие, поскольку, как я полагаю, ToC заголовка zip должен быть определен во время записи. Однако я мог ошибаться.

Ответ 7

Да, вы можете, используя SQLite, вы можете читать или записывать в базу данных из файла jar, так что вам не придется извлекать, а затем повторно использовать его, следуя моему сообщению http://shoaibinamdar.in/blog/?p=313

используя синтаксис "jdbc: sqlite:: resource:", вы сможете читать и записывать в базу данных из файла jar

Ответ 8

Ознакомьтесь с TrueZip.

Он делает именно то, что вы хотите (для редактирования встроенных файлов внутри файла jar), через API виртуальной файловой системы. Он также поддерживает вложенные архивы (банку внутри банки).

Ответ 9

Извлечь файл jar для ex. с winrar и использовать CAVAJ:

Cavaj Java Decompiler - графическая бесплатная утилита, которая восстанавливает исходный код Java из файлов CLASS.

вот видео-учебник, если вам нужно: https://www.youtube.com/watch?v=ByLUeem7680

Ответ 10

Не уверен, что эта помощь, но вы можете редактировать без извлечения:

  • Откройте файл jar из редактора vi
  • Выберите файл, который вы хотите отредактировать из списка
  • Нажмите "Enter", чтобы открыть файл, чтобы сменить и сохранить его. довольно простой

Проверьте сообщение в блоге для получения более подробной информации http://vinurip.blogspot.com/2015/04/how-to-edit-contents-of-jar-file-on-mac.html

Ответ 11

Пока этот файл не является .class, то есть файл ресурсов или файл манифеста, вы можете.

Ответ 12

Самый простой способ, который я нашел для этого в Windows, - WinRAR:

  • Щелкните правой кнопкой мыши файл и выберите "Открыть с помощью WinRAR" в контекстном меню.
  • Перейдите к редактируемому файлу и дважды щелкните по нему, чтобы открыть его в редакторе по умолчанию.
  • После внесения изменений сохраните и выйдите из редактора.
  • Появится диалог с запросом, если вы хотите обновить файл в архиве - выберите "Да", и JAR будет обновлен.