2013-02-27 2 views
-1

У меня есть приложение, в котором есть переменная 'file_Base_Path', и я читаю его значение из свойстваFile (скажем sample.properties). И я хочу установить значение переменной user.home и $ {user.home} не работает. Как установить значение для user.home, чтобы он работал как в Linux, так и в Windows.Как указать user.home в PropertyFile?

Примечание: я не могу использовать 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}' 

Благодарности

+0

Я считаю, что вам не нужно такое значение в файле свойств. Где бы вам ни понадобилось '/ home/user' просто использовать' System.getProperty («user.home») ' – Apurv

+0

Я думал, что' user.home' * did * работает в Linux. –

+3

Что вы подразумеваете под «значением не всегда user.home»? –

ответ

0

свойства-файл не делает среду Varia можные замены ...

Способ получения переменной среды является

System.getProperties("variablename"); 

Если "variablename" переменные в нем себя, почему бы не настроить, что через свойство?

sample.properties:

userhome.variable.name=user.home 

Java код:

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

Я не ожидаю этого пользователя. Всегда – Jeevi

0

почему бы вам не сделать это:

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

Если вы используете весной @Value аннотацию переведет ${user.home} до его соответствующей ценности при инъекции.

Держите sample.properties как и в вашем классе вы будете использовать:

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

И переменная ${user.home} будет переведен весной перед инъекцией в переменную.

См. Value для получения дополнительной информации.

В качестве альтернативы использовать Apache Configuration Commons, как описано here

Если вы не хотите использовать Spring или Apache Configuration Commons, то вам придется разворачивать собственное решение, как свойства и System.getProperties не делает преобразование на содержимое файла свойств. Вы должны были бы:

  1. Проверьте, содержит ли строка «$ {» (для случаев, когда пользователь указывает полный путь, например «C:/temp», преобразование не требуется);
  2. Извлечь содержимое недвижимости;
  3. Использование системы.getProperty (String), чтобы получить фактическое значение;
  4. Добавьте значение обратно к строке в том месте, где оно было найдено (например, для случаев, когда у вас есть что-то вроде file_Base_Path=${user.home}/resources/${java.version}).
Смежные вопросы