本Java教程是针对JDK 8编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,可能使用不再可用的技术。
请参阅Java语言变更,了解Java SE 9及后续版本中更新的语言特性的摘要。
请参阅JDK发布说明,了解所有JDK版本的新功能、增强功能以及已删除或弃用选项的信息。
键 | 含义 |
---|---|
"file.separator" |
文件路径中分隔组件的字符。UNIX上为"/ ",Windows上为"\ "。 |
"java.class.path" |
用于查找包含类文件的目录和JAR文件的路径。类路径的元素由path.separator属性指定的特定于平台的字符分隔。 |
"java.home" |
Java Runtime Environment(JRE)的安装目录 |
"java.vendor" |
JRE供应商名称 |
"java.vendor.url" |
JRE供应商URL |
"java.version" |
JRE版本号 |
"line.separator" |
操作系统用于在文本文件中分隔行的序列 |
"os.arch" |
操作系统架构 |
"os.name" |
操作系统名称 |
"os.version" |
操作系统版本 |
"path.separator" |
java.class.path 中使用的路径分隔符字符 |
"user.dir" |
用户工作目录 |
"user.home" |
用户主目录 |
"user.name" |
用户账户名称 |
System
类有两个用于读取系统属性的方法:getProperty
和getProperties
。
System
类有两个不同版本的getProperty
。两者都用于检索参数列表中命名的属性的值。其中较简单的getProperty
方法接受一个参数,即属性键。例如,要获取path.separator
的值,请使用以下语句:
System.getProperty("path.separator");
getProperty
方法返回一个包含属性值的字符串。如果属性不存在,则此版本的getProperty
返回null。
另一个getProperty
的版本需要两个String
参数:第一个参数是要查找的键,第二个参数是如果找不到键或键没有值时要返回的默认值。例如,下面的getProperty
调用查找名为subliminal.message
的System
属性。这不是一个有效的系统属性,因此该方法会返回作为第二个参数提供的默认值:"Buy StayPuft Marshmallows!"
System.getProperty("subliminal.message", "Buy StayPuft Marshmallows!");
System
类提供的最后一个访问属性值的方法是getProperties
方法,它返回一个Properties
对象。该对象包含了一个完整的系统属性定义集合。
要修改现有的系统属性集,使用System.setProperties
。该方法接受一个已初始化为包含要设置的属性的Properties
对象。该方法将用Properties
对象表示的新属性集替换整个系统属性集。
下一个示例PropertiesTest
创建一个Properties
对象,并从myProperties.txt
文件中初始化它。
subliminal.message=购买StayPuft棉花糖!
PropertiesTest
然后使用System.setProperties
将新的Properties
对象安装为当前的系统属性集。
import java.io.FileInputStream; import java.util.Properties; public class PropertiesTest { public static void main(String[] args) throws Exception { // 设置新的属性对象 // 来自文件"myProperties.txt" FileInputStream propFile = new FileInputStream( "myProperties.txt"); Properties p = new Properties(System.getProperties()); p.load(propFile); // 设置系统属性 System.setProperties(p); // 显示新属性 System.getProperties().list(System.out); } }
请注意,PropertiesTest
创建了Properties
对象p
,它被用作setProperties
的参数:
Properties p = new Properties(System.getProperties());
此语句使用当前的系统属性集来初始化新的属性对象p
,对于这个小应用程序来说,它是运行时系统初始化的属性集。然后应用程序从文件myProperties.txt
加载附加属性到p
并将系统属性设置为p
。这将导致将myProperties.txt
中列出的属性添加到运行时系统在启动时创建的属性集中。请注意,应用程序可以创建没有任何默认Properties
对象的p
,如下所示:
Properties p = new Properties();
还要注意,系统属性的值可以被覆盖!例如,如果myProperties.txt
包含以下行,则java.vendor
系统属性将被覆盖:
java.vendor=Acme Software Company
一般来说,要小心不要覆盖系统属性。
setProperties
方法更改当前正在运行的应用程序的系统属性集。这些更改不是持久的。也就是说,在应用程序内更改系统属性不会影响此应用程序或任何其他应用程序的Java解释器的未来调用。运行时系统每次启动时都会重新初始化系统属性。如果要使系统属性的更改持久,那么应用程序必须在退出之前将值写入某个文件,并在启动时再次读取它们。