Вот проблема:
is=this.getClass().getResourceAsStream("/config/config.properties");
Это не так, как при обычном чтении файловой системы. Он читает ресурс из пути к классам, используя путь относительно каталога или файла JAR, который находится в пути к классам. Путь - это путь к ресурсу, а не путь к файловой системе.
Если вы хотите записать в этот файл:
Это должен быть отдельно стоящий файл, а не JAR или ZIP-файл или что-то в этом роде.
Он не должен быть доступен только для чтения ... или заблокирован.
Вам необходимо знать фактическую абсолютную или относительную файловую систему путь, который соответствует пути к ресурсу. (Поскольку методы API ресурса не предоставляют способ открыть ресурс для записи.)
Вместо этого вы попытались использовать путь к ресурсу , чтобы определить файл, когда вы открываете его для записи. (Для класса FileOutputStream
требуется путь к файловой системе.)
По сути, вам придется изменить это. Обновление информации о пути к ресурсу обычно сложно, а иногда и невозможно. Кроме того, вы, кажется, ссылаетесь на ресурс в /src/...
месте, которого не будет в пути к классам при развертывании вашего приложения. (Я предполагаю, что вы не ожидаете, что ваши пользователи загрузят, установят и научатся использовать Java IDE, чтобы они могли запускать ваше приложение!)
Лучшая идея - поместить файл свойств в каталог установки приложения или домашний каталог пользователя. Затем вы выясняете, как приложение узнает, где это. (Например, если вы запускаете приложение с помощью сценария-оболочки, сценарий может передать путь к каталогу установки вашему приложению с помощью параметра -D
.
Другой альтернативой является использование API настроек Java, который может хранить настройки в стандартном месте (для конкретной платформы) в файловой системе.