本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解释器的未来调用。运行时系统每次启动时都会重新初始化系统属性。如果要使系统属性的更改持久,那么应用程序必须在退出之前将值写入某个文件,并在启动时再次读取它们。