2010-10-20 61 views
1

我可以在.properties文件中執行類似working-dir="file:${user.home}/some-directory"的操作嗎?我正在使用ResourceBundle從.properties文件加載配置,我會繼承系統屬性密鑰,例如user.home用於我的working-dir屬性。能夠做到這一點很好,因爲我可以分別在源包和測試包的資源目錄中擁有不同版本的.properties。我想爲我的生產和測試環境定義working-dir的不同值。在我的自定義.properties文件中繼承user.home屬性

回答

1

您不能直接這樣做,但是您可以在代碼中解析您的屬性並以編程方式擴展變量,例如

  • 搜索模式${varname}你的財產
  • 獲得的varname從系統屬性值
  • 更換${varname}與系統屬性varname

這裏的值是一個簡單的實現以上:

String property = "file:${user.home}/some-directory"; 

StringBuffer sb = new StringBuffer(); 
Pattern pattern = Pattern.compile("\\$\\{(.+)\\}"); 
Matcher matcher = pattern.matcher(property); 
while (matcher.find()) 
{ 
    String key = matcher.group(1); 
    String val = System.getProperty(key); 
    if (val != null) 
    { 
     matcher.appendReplacement(sb, Matcher.quoteReplacement(val)); 
    } 
} 
matcher.appendTail(sb); 
System.out.println(sb.toString()); 
+0

這將工作。謝謝。太糟糕了,它不被支持。 – walters 2010-10-20 08:46:54