JavaFX - как писать и читать json, находящиеся в пакете / банке [дубликат]

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

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

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

5 ответов

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

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

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


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

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

93
ответ дан Andrew Thompson 19 August 2018 в 04:07
поделиться
  • 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 19 August 2018 в 04:07
поделиться

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

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

2
ответ дан OrangeDog 19 August 2018 в 04:07
поделиться

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

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

3
ответ дан Peter Lawrey 19 August 2018 в 04:07
поделиться

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

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

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