如何在PropertyFile中指定user.home?

时间:2013-02-27 09:57:48

标签: java properties

我有一个应用程序,其中有一个变量'file_Base_Path',我正在从propertyFile读取它的值(比如sample.properties)。我想将变量值设置为user.home和 $ {user.home} 无效。如何将值设置为user.home,以便它在Linux和Windows中都能正常工作。

注意:我不能使用System.getProperties('user.home')因为值不总是user.home它可能会有所不同

sample.properties:

    file_Base_Path=${user.home}

我如何设置值:

  properties.getProperty("file_Base_Path")  //i'm expecting '/home/user' but it is returning '${user.home}'

由于

3 个答案:

答案 0 :(得分:0)

属性文件没有环境变量替换...

获取环境变量的方法是

System.getProperties("variablename");

如果"variablename"是自变量的,为什么不通过属性配置?

sample.properties:

userhome.variable.name=user.home

Java代码:

String userhomeVariableName = properties.getProperty("userhome.variable.name");
String userhome = System.getProperties(userhomeVariableName);

答案 1 :(得分:0)

为什么不这样做:

 String localHome=properties.getProperty("file_Base_Path");
 if(localHome.equals("${user.home}"){
      localHome=System.getProperties("user.home");
 }

答案 2 :(得分:0)

如果使用Spring,@Value注释会将${user.home}转换为适当的注入值。

保持sample.properties按原样保存在您的类中:

@Value("${file_Base_Path}")
private String filePath;

在注入变量之前,${user.home}变量将被Spring翻译。

有关详情,请参阅Value

或者按照here

的说明使用Apache Commons Configuration

如果您不想使用Spring或Apache Commons Configuration,那么您必须推出自己的解决方案,因为Properties和System.getProperties不会对属性文件的内容进行转换。你必须:

  1. 检查字符串是否包含“$ {”(对于用户指定完整路径的情况,例如“C:/ temp”,不需要进行转换);
  2. 提取属性内容;
  3. 使用System.getProperty(String)获取实际值;
  4. 将值添加回找到它的位置的字符串(例如,当您有类似file_Base_Path=${user.home}/resources/${java.version}的情况时)。