Java中System.getProperty和properties.getProperty有什么区别?

27
我有一个名为 prop.properties 的属性文件。在我的主要代码中,我同时使用了 System.getProperty()properties.getProperty()
我的问题是:它们都从 prop.properties 获取属性吗?还是说它们会从不同的地方获取属性,properties.getProperty()prop.properties 获取属性,而 System.getProperty() 则从其他地方获取属性?

1
取决于 properties 来自哪里。如果 Properties properties = System.getProperties();,那么它们将是相同的。如果 Properties propertes = new Properties();,那么它们将不同。 - CodeBlind
3个回答

46

System.getProperty()会获取JVM定义的属性(无论是JVM本身还是在命令行中传递的任何-D选项)。 已定义属性的列表可以在这里找到(感谢@NikitaBeloglazov)。

properties.getProperty()是某人初始化了一个Properties类型对象的结果。 虽然它们不同,但是您可以获取System作为Properties实例的内容

Properties对象非常常用于加载Java属性文件(请参见此处以了解如何执行此操作)。


你能否添加一个关于系统属性的Java教程链接?http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html - Mikita Belahlazau

15

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");

不一样。


谢谢您的帮助。现在我可以弄清楚了。 - Jay Zhang

4

System类指的是您正在运行的JVM(它将从您的操作系统获取信息)。当您在System上使用getProperty时,您会获得实际属性。

Property类基本上是一个高级哈希表。您可以完全自定义它,因此当您执行getProperty()时,您会获得设置的结果。 Property类的有用之处在于它具有内置的XML解析器,因此您可以从文件中读取属性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接