Может читать, но не может писать в файл свойств с помощью Spring - PullRequest
0 голосов
/ 07 мая 2020

Я использую файл свойств для некоторых настраиваемых значений. Но я не знаю, почему я могу прочитать значение свойства, но когда я хочу обновить существующую или записать новую пару ключ / значение, она не работает

Properties props = new Properties();

        try 
        {
            String key = "maxHolidays";

            File file = ResourceUtils.getFile("classpath:config.properties");
            InputStream in = new FileInputStream(file);
            props.load(in);
            String maxHolidays = (String) props.get(key);
            System.out.println(maxHolidays);  

            props.setProperty("newkey", "newvalue");

            OutputStream out = new FileOutputStream(file);

            props.store(out, null);

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

    File file = ResourceUtils.getFile("classpath:First.properties");
    FileInputStream in = new FileInputStream(file);
    Properties props = new Properties();
    props.load(in);
    System.out.println(props.getProperty("country"));
    in.close();

    FileOutputStream out = new FileOutputStream(file);
    props.setProperty("country", "germany");
    props.store(out, null);
    System.out.println(props.getProperty("country"));
    out.close();

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

1 Ответ

0 голосов
/ 07 мая 2020

Это должно работать,

    Properties props = new Properties();

    try {
        String key = "maxHolidays";

        File file = ResourceUtils.getFile("file:config.properties");
        InputStream in = new FileInputStream(file);
        props.load(in);
        String maxHolidays = (String) props.get(key);
        System.out.println(maxHolidays);

        props.setProperty("newkey", "newvalue");

        OutputStream out = new FileOutputStream(file);

        props.store(out, null);
    } catch (IOException e) {
        e.printStackTrace();
    }

поместите ваш config.properties в root папки вашего проекта

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