Запись в файл свойств - PullRequest
0 голосов
/ 15 июня 2019

Попытка записать значение в параметр в файле свойств.Файл config.properties уже создан в папке / src / config, и я могу его прочитать.У него только один параметр «статус».Но когда я пытаюсь обновить / записать файл свойств, появляется следующая ошибка: java.io.FileNotFoundException: \ src \ config \ config.properties (системе не удается найти указанный путь)

Properties prop = new Properties();
    prop.setProperty("status","1");
        try {
            prop.store(new FileOutputStream("/src/config/config.properties"), null);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

Ответы [ 2 ]

3 голосов
/ 15 июня 2019

Вот проблема:

    is=this.getClass().getResourceAsStream("/config/config.properties");

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

Если вы хотите записать в этот файл:

  1. Это должен быть отдельно стоящий файл, а не JAR или ZIP-файл или что-то в этом роде.

  2. Он не должен быть доступен только для чтения ... или заблокирован.

  3. Вам необходимо знать фактическую абсолютную или относительную файловую систему путь, который соответствует пути к ресурсу. (Поскольку методы API ресурса не предоставляют способ открыть ресурс для записи.)

Вместо этого вы попытались использовать путь к ресурсу , чтобы определить файл, когда вы открываете его для записи. (Для класса FileOutputStream требуется путь к файловой системе.)


По сути, вам придется изменить это. Обновление информации о пути к ресурсу обычно сложно, а иногда и невозможно. Кроме того, вы, кажется, ссылаетесь на ресурс в /src/... месте, которого не будет в пути к классам при развертывании вашего приложения. (Я предполагаю, что вы не ожидаете, что ваши пользователи загрузят, установят и научатся использовать Java IDE, чтобы они могли запускать ваше приложение!)

Лучшая идея - поместить файл свойств в каталог установки приложения или домашний каталог пользователя. Затем вы выясняете, как приложение узнает, где это. (Например, если вы запускаете приложение с помощью сценария-оболочки, сценарий может передать путь к каталогу установки вашему приложению с помощью параметра -D.

Другой альтернативой является использование API настроек Java, который может хранить настройки в стандартном месте (для конкретной платформы) в файловой системе.

0 голосов
/ 15 июня 2019

Мне нужна система построения конфигурации, вы используете gradle, maven, ant? нет ничего?

Поскольку ваш код не будет работать в jar, потому что в jar не существует каталога src.

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

Для использования абсолютного пути посмотрите этот пост , но я надеюсь, что вы добавите больше информации в пост для вашего проекта.

prop.store(new FileOutputStream(System.getProperty("user.dir") + "/src/config/config.properties"), null);

Я посмотрел комментарий, а вы прочитали файл проприетиса с this.getClass().getResourceAsStream(), и у него другое разрешение пути, FileOutputStream.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...