Мне нужно хранить данные в файлах внутри .jar файла и читать его снова.
Я знаю, что я могу использовать метод Class.getResourceAsStream()
, но он возвращает InputStream
, из которого я могу прочитать. Но я ищу способ написать.
Мне нужно хранить данные в файлах внутри .jar файла и читать его снова.
Я знаю, что я могу использовать метод Class.getResourceAsStream()
, но он возвращает InputStream
, из которого я могу прочитать. Но я ищу способ написать.
Мне нужно хранить данные в файлах внутри .jar файла и читать его снова
Нет, нет.
Вместо этого сохраните файл по умолчанию в Jar. Если он изменен, сохраните измененный файл в другом месте. Одним из распространенных мест является подкаталог user.home
. При проверке файла сначала проверьте наличие измененного файла в файловой системе, а если он не существует, загрузите файл по умолчанию.
Обратите внимание, что обычно лучше описывать цель, а не стратегию. "Сохранить измененный файл в Jar" - это стратегия, тогда как "Сохранить настройки между запусками" может быть целью.
Связанный: Что такое проблема XY?
Это не поддерживается. В принципе, вы можете работать с файлом jar, но нет гарантии, что новое содержимое будет правильно загружено. Пусть ваши инструменты сборки управляют файлом jar - и выберите что-то еще для постоянной памяти, управляемой вашей программой. Как файл.
Вряд ли вы можете безопасно изменить загруженную банку. Изменение его во время его использования не является хорошей идеей.
Если вы хотите сделать это, используйте обычный файловый системный каталог и добавьте/удалите файлы из него. Даже это может работать не так, как вы ожидаете.
Вы можете манипулировать любым файлом jar с помощью пакета java.util.jar
(или просто просто java.util.zip
). Поскольку файлы внутри банки будут сжаты, это не самый эффективный способ хранения данных.
Вероятно, вы должны использовать каталог где-нибудь еще (например, System.getProperty("user.home") + "/.myProgram"
) или см. java.util.prefs
.
Class.getResource()
возвращает URL-адрес. Теоретически вы можете использовать этот URL для создания InputStream
и OutputStream
. Но в большинстве случаев сгенерированный JAR является файлом, доступным только для чтения (или архивом). Таким образом, ваше приложение может отключиться при попытке его использования.