Как приложение может использовать файлы внутри JAR для чтения и записи? - PullRequest
33 голосов
/ 19 февраля 2011

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

Я знаю, что могу использовать метод Class.getResourceAsStream(), но он возвращает InputStream, что я могу читать от.Но я ищу способ написать.

Ответы [ 5 ]

92 голосов
/ 19 февраля 2011

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

Нет, не надо.

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


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

Связанный: В чем проблема XY?

3 голосов
/ 19 февраля 2011

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

2 голосов
/ 19 февраля 2011

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

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

2 голосов
/ 19 февраля 2011

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

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

1 голос
/ 15 апреля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...