Есть .properties файл в нем лежат пути:
path1=doc/1.txt
path2=src/2.png
И есть корень который ведет в папку где лежат doc/1 и src/2
root=/user/pavel/Document/
Пытаюсь сделать так чтобы я мог только в одном месте менять корень. На пример:
root=/user/pavel/Document
path1=${root}/doc/1.txt
path2=${root}/src/2.png
Как это сделать подскажите пожалуйста.
Если проект собирается maven'ом то можно сделать так:
в pom.xml добавить следующее:
<project>
<properties>
<custom.property>property-value</custom.property>
</properties>
...
<build>
...
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>file.properties</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
<project>
тогда если file.properties содержит шаблон, на примере такого:
prop.name = value of my prop is ${custom.property}
после выполнения команды:
prepare-resources
в файле окажется строка:
prop.name = value of my prop is property-value
Если поискать на SO, то можно найти этот вопрос
Из него видно, что java не парсит переменные сама, это надо делать за нее.
Для переменных окружения эта можно сделать так:
/*
* Returns input string with environment variable references expanded, e.g. $SOME_VAR or ${SOME_VAR}
*/
private String resolveEnvVars(String input)
{
if (null == input)
{
return null;
}
// match ${ENV_VAR_NAME} or $ENV_VAR_NAME
Pattern p = Pattern.compile("\\$\\{(\\w+)\\}|\\$(\\w+)");
Matcher m = p.matcher(input); // get a matcher object
StringBuffer sb = new StringBuffer();
while(m.find()){
String envVarName = null == m.group(1) ? m.group(2) : m.group(1);
String envVarValue = System.getenv(envVarName);
m.appendReplacement(sb, null == envVarValue ? "" : envVarValue);
}
m.appendTail(sb);
return sb.toString();
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей