Вопрос-ответ

How can an app use files inside the JAR for read and write?

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

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

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

Переведено автоматически
Ответ 1

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


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

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


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

По теме: В чем проблема XY?

Ответ 2

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

Ответ 3

Маловероятно, что вы сможете безопасно изменять загруженный jar. Изменять его во время использования - плохая идея.

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

Ответ 4

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

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

java jar