#java #json #file #resources
#java #jar #входной поток #outputstream
Вопрос:
Мне нужно хранить данные в файлах внутри.файл 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
.
Ответ №5:
Class.getResource()
возвращает URL. Теоретически вы можете использовать этот URL для создания своего InputStream
и OutputStream
. Но в большинстве случаев созданный JAR-файл (или архив) доступен только для чтения. Таким образом, ваше приложение может сработать при попытке его использования.