2009-09-11 1 views
38

Можно создать дубликат:
How to reference another property in java.util.Properties?

посмотреть на мои "file.properties":

key1= My name is 
key2= ${key1} Martin ! 

Почему, когда я получаю значение " key2 "мой результат" $ {key1} Мартин! " в отличие от «Меня зовут Мартин!»

=> I программа Java 6
=> Я использую java.util.Properties

ответ

27

Вы можете посмотреть на конфигурацию Apache,

http://commons.apache.org/configuration/

Среди многих функций, которые он поддерживает это Variable Interpolation.

+3

Вот и все! name = Martin myKey = hi $ {name}! Строка result = new PropertiesConfiguration ("myFile.properties"). GetString ("myKey"); ====> Значение «результата» - «привет Мартину!». –

12

То, что вы хотите сделать, это невозможно с помощью Java Properties class.

Ключи и значения свойств - это просто строки. С ними не происходит обработки, поэтому вы не можете ссылаться на другое значение в значении.

+0

странно. Используя ANT, вы можете это сделать. Что случилось с Java? –

+3

ANT не имеет ничего общего с свойствами Java. Мое (ограниченное) понимание материала под капотом в ANT заключается в том, что он разбирается. Файлы Java-файлов - это просто текстовые файлы, содержащие клавиши String и String, которые могут быть загружены в память. –

+0

Прошло некоторое время с тех пор, как я посмотрел на источник, но я думаю, что ant использует org.apache.commons.configuration для его анализа свойств. Не цитируйте меня на этом. – seth

1

Файлы Ant - это скрипты; Файл свойств - это ведра строк.

Основная цель файлов свойств - служить в качестве контейнеров строк для текста с переводом. Строки формата, обычно используемые в пакетах ресурсов, используют систему на основе индексов. Когда строка транслируется, порядок параметров может быть изменен в переведенных версиях строки без необходимости изменения кода Java.

String what = "Hello"; 
String who = "Martin"; 
System.out.println(MessageFormat.format("{0}, {1}!", what, who)); 
System.out.println(MessageFormat.format("{1}, {0}!", what, who)); 

Выход:

Hello, Martin! 
Martin, Hello! 

Для случаев использования, как это, это не имело бы смысла, чтобы инкапсулировать функциональность в классе свойств, поскольку строки обычно требуются данные из приложения. Для выполнения замены можно использовать класс MessageFormat.

Этого типа форматирования не следует путать с другими вариантами форматирования, как указано на Formatter:

System.out.format("%s, %s!%n", what, who);