Как правило, вы не можете обновить файл, который вы нашли, используя getResourceAsStream
. Это может быть файл в файле JAR / ZIP ... и его запись повлечет за собой переписывание всего файла JAR. Это может быть удаленный файл, обслуживаемый загрузчиком классов Url.
Для вашего здравого смысла (и хорошей практики) вы не должны пытаться обновить файлы, к которым вы обращаетесь через classpath. Если вам нужно, прочитайте файл из файла JAR (или любого другого), скопируйте его в обычную файловую систему и обновите копию.
Я не говорю, что невозможно сделать это во всех случаях. Действительно, в большинстве нормальных случаев вы можете сделать это с некоторым усилием. Однако это не поддерживается, и для этого нет стандартных API.
Кроме того, попытки обновить ресурсы могут вызвать аномалии в загрузчике классов. Например, я ожидаю, что ресурсы в файлах JAR не будут обновляться (с точки зрения приложения), пока приложение не будет перезапущено. Но ресурсы в разобранных файлах JAR, вероятно, обновятся ... хотя новые ресурсы могут не отображаться.
Наконец, есть случаи, когда обновление ресурса невозможно :
Когда у пользователя нет прав на запись в каталог установки приложения. Это типично для правильно администрируемой машины UNIX / Linux.
При извлечении файла JAR с удаленного сервера вы, скорее всего, не сможете записать обновления обратно.
Когда вы используете произвольный пользовательский загрузчик классов, у вас нет возможности узнать, где должны храниться фактические байты обновленного ресурса, и нет способа их хранения.