В чем разница между System.getProperty и свойствами .getProperty в Java
У меня есть файл свойств с именем prop.properties
. В моем основном коде у меня есть как System.getProperty()
, так и properties.getProperty()
.
Мой вопрос: оба они получают свойство из prop.properties
или они получат свойство из разных мест, properties.getProperty()
получить свойство из prop.properties
и System.getProperty()
получить свойство из другого места.
Ответы
Ответ 1
System.getProperty()
получает свойство, определенное JVM (либо сам JVM, либо любые опции -D
, которые вы, возможно, прошли на командная строка). Список определенных свойств можно найти здесь (спасибо @НикитаБелоглазова).
properties.getProperty()
является результатом того, что кто-то инициализировал объект типа Properties
. Они не совпадают, хотя вы можете получить то, что System
имеет как экземпляр Properties
.
Объект A Properties
очень часто является результатом загрузки файла свойств Java (см. здесь, как это делается)
Ответ 2
System.getProperty(propName)
является ярлыком для System.getProperties().getProperty(propName)
.
Однако java.util.Properties
является просто подклассом java.utils.Hashtable
, поэтому его экземпляр может быть создан везде в коде и заполнен любыми данными. Очевидно, код
Properties props = System.getProperties();
props.getProperty("os.name");
совпадает с
System.getProperty("os.name");
Однако
Properties props = new Properties();
props.load(new FileInputStream("myprops.properties"))
props.getProperty("os.name");
не то же самое.
Ответ 3
Класс System
относится к JVM, который вы используете (который будет получать информацию из вашей ОС). Когда вы используете getProperty
на System
, вы получаете фактические свойства.
Класс Property
- это, в основном, прославленная хеш-таблица. Вы можете полностью определить его самостоятельно, поэтому, когда вы делаете getProperty()
, вы получаете результаты, которые вы настроили. Полезность класса Property
заключается в том, что он имеет встроенный синтаксический анализатор XML, поэтому вы можете читать свойства из файла.