Загрузка данных внутри файла Jar [дубликат]

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

Поскольку eax используется как регистр возврата, он часто используется как регистр «царапины» по вызову, потому что его не нужно сохранять. Это означает, что очень возможно, что он будет использоваться как любая из локальных переменных. Поскольку оба они равны в конце, более вероятно, что правильное значение останется в eax .

31
задан informatik01 29 October 2013 в 07:45
поделиться

5 ответов

Мне нужно хранить данные в файлах внутри .jar-файла и читать его снова

Нет, вы этого не делаете.

Вместо этого сохраните 'default 'файл внутри Jar. Если он изменен, сохраните измененный файл в другом месте. Одно общее место - подкаталог user.home. При проверке файла сначала проверьте наличие измененного файла в файловой системе, а если он не существует, загрузите файл по умолчанию.


Обратите внимание, что, как правило, лучше описывать а не стратегии. «Сохранить измененный файл в Jar» является стратегией, тогда как «Сохранить настройки между запусками» может быть целью.

Связано: Что является проблемой XY?

93
ответ дан Andrew Thompson 15 August 2018 в 14:54
поделиться
  • 1
    +1 Удивительное примечание в конце. – asgs 12 August 2011 в 11:33
  • 2
    Я просто хочу, чтобы люди поняли эту заметку, чтобы мне не приходилось постоянно ее предлагать (часто это не очень хорошо - BTW;). – Andrew Thompson 12 August 2011 в 11:54
  • 3
    Все, что называется стратегией, также может быть целью, поскольку программы могут быть данными. – Hernán Eche 16 August 2016 в 15:58

Class.getResource() возвращает URL-адрес. Теоретически вы можете использовать этот URL для создания своих InputStream и OutputStream. Но в большинстве случаев сгенерированный JAR является файлом, доступным только для чтения (или архивом). Таким образом, ваше приложение может отключиться при попытке его использовать.

1
ответ дан Binaek Sarkar 15 August 2018 в 14:54
поделиться

Вы можете манипулировать любым файлом jar с помощью пакета java.util.jar (или действительно только java.util.zip). Поскольку файлы внутри банки будут сжаты, это не самый эффективный способ time для хранения данных.

Вероятно, вы должны использовать каталог где-нибудь еще (например, System.getProperty("user.home") + "/.myProgram") или см. java.util.prefs.

2
ответ дан OrangeDog 15 August 2018 в 14:54
поделиться

Вряд ли вы можете безопасно изменить загруженную банку. Изменение его во время его использования не является хорошей идеей.

Если вы хотите это сделать, используйте простой файловый системный каталог и добавьте / удалите из него файлы. Даже это может не работать так, как вы ожидаете.

3
ответ дан Peter Lawrey 15 August 2018 в 14:54
поделиться

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

3
ответ дан Vance Maverick 15 August 2018 в 14:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: