Как приложение может использовать файлы внутри JAR для чтения и записи?

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

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

5 ответов

Решение

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

Нет, ты не

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


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

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

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

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

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

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

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

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

Другие вопросы по тегам