Есть ли способ изменить файл свойств, который находится в моем classpath? - PullRequest
0 голосов
/ 18 октября 2011

У меня есть файл свойств, который находится в моем classpath.Мое требование состоит в том, чтобы изменить некоторые свойства в этом файле на основе некоторых входных данных, которые я получаю из аргументов.Характер аргументов решает, нужно ли мне менять свойства и если да, какие свойства менять.Проблема в том, что все записи classpath загружаются во время запуска приложения, поэтому изменение изнутри моего приложения не будет иметь никакого эффекта.Как мне преодолеть эту проблему?

Одно из возможных решений, которое я могу придумать, - не добавлять этот файл свойств в classpath, а добавлять после внесения изменений.Это жизнеспособно?Что может быть хорошим решением?

Ответы [ 4 ]

1 голос
/ 18 октября 2011

Зависит от того, как развернуто ваше приложение.Если ваши файлы свойств находятся внутри jar, вы не сможете напрямую изменить этот файл свойств, так как он упакован и упакован в архив.Вместо этого вы можете, как кто-то другой, упомянуть, загрузить эти свойства в объект, а затем сохранить / записать во внешнее местоположение, возможно, на основе URL-адреса.URL удобен, потому что он дает вам доступ практически к любому местоположению, и у него есть отличный метод openStream () для загрузки свойств.Ваше приложение могло бы тогда искать новый файл при загрузке, и по умолчанию к версии запуска приложения, если это не в состоянии читать / загружать из нового местоположения.

1 голос
/ 18 октября 2011

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

Файлы свойств, которые придерживаются правильного формата, могут быть считаны в java.util.Свойства объекта.Вы можете сделать это, использовать объект для изменения свойств по мере необходимости, а затем записать его обратно в файл.Проверьте методы store и load в этом классе.Имейте в виду, что если вы используете версии, которые принимают Output/InputStream, кодировка жестко закодирована.Если кодировка файла отличается от ISO-8859-1, используйте метод с соответствующим Writer/Reader.

0 голосов
/ 18 октября 2011

Вам необходимо сначала удалить это свойство из файла свойств, а затем переопределить его.Их невозможно напрямую изменить в файле свойств.

Ниже приведен пример:

   Properties pproperties = new Properties();

    if (properties.containsKey("key1")) {

                        properties.remove("key1");
                        properties.setProperty("key1", "value1");
                        properties.store(new FileOutputStream("file.properties"), null);
                    }
0 голосов
/ 18 октября 2011

Вот пример кода:

Properties p = new Properties();
File f = new File("file");
InputStream in = new FileInputStream(f);
p.load(in);
p.put("key", "blah");

OutputStream out = new FileOutputStream(f);
// If no comments p.store(writer);
p.store(out, "properties");
...