文档

Java™ 教程-Java Tutorials 中文版
属性
Trail: Essential Classes
Lesson: The Platform Environment
Section: Configuration Utilities

属性

Properties (属性) 是作为 key/value pairs (键/值对) 管理的配置值。在每对中,键和值都是 String 值。key 用于标识和获取值,就像变量名用于获取变量的值一样。例如,能够下载文件的应用程序可能使用名为“download.lastDirectory”的属性来跟踪上次下载所使用的目录。

要管理属性,请创建 java.util.Properties 的实例。此类提供以下方法:

有关流的介绍,请参阅 Basic I/O 课程中的 I/O Streams 部分。

Properties 继承 java.util.Hashtable。从 Hashtable 继承的一些方法支持以下操作:


安全考虑: 访问属性需要获得当前安全管理员的批准。假定本节中的示例代码段位于独立应用程序中,默认情况下,它们没有安全管理器。applet 中的相同代码可能无法运行,具体取决于运行它的浏览器。有关 applet 安全限制的信息,请参阅 Java Applets 课程中的 What Applets Can and Cannot Do

System 类维护一个 Properties 对象,该对象定义当前工作环境的配置。有关这些属性的更多信息,请参阅 System Properties。本节的其余部分介绍了如何使用属性来管理应用程序配置。

应用程序生命周期中的属性

下图说明了典型应用程序在执行过程中如何使用 Properties 对象管理其配置数据。

Properties 对象的可能生命周期

设置属性对象

以下 Java 代码执行上一节中描述的前两个步骤:加载默认属性并加载记住的属性:

. . .
// create and load default properties
Properties defaultProps = new Properties();
FileInputStream in = new FileInputStream("defaultProperties");
defaultProps.load(in);
in.close();

// create application properties with default
Properties applicationProps = new Properties(defaultProps);

// now load properties 
// from last invocation
in = new FileInputStream("appProperties");
applicationProps.load(in);
in.close();
. . .

首先,应用程序设置默认的 Properties 对象。此对象包含在其他地方未显式设置值时要使用的属性集。然后,load 方法从名为 defaultProperties 的磁盘上的文件中读取默认值。

接下来,应用程序使用不同的构造函数创建第二个 Properties 对象 applicationProps,其默认值包含在 defaultProps 中。在获取属性时,默认值开始起作用。如果在 applicationProps 中找不到该属性,则会搜索其默认列表。

最后,代码从名为 appProperties 的文件中将一组属性加载到 applicationProps 中。此文件中的属性是上次调用时从应用程序保存的属性,如下一节中所述。

保存属性

以下示例使用 Properties.store 写出上一个示例中的应用程序属性。每次都不需要保存默认属性,因为它们永远不会更改。

FileOutputStream out = new FileOutputStream("appProperties");
applicationProps.store(out, "---No Comment---");
out.close();

store 方法需要一个要写入的流,以及一个用作输出顶部注释的字符串。

获取属性信息

应用程序设置了 Properties 对象后,应用程序可以查询对象以获取有关其包含的各种键和值的信息。应用程序在启动后从 Properties 对象获取信息,以便它可以根据用户的选择初始化自身。Properties 类有几种获取属性信息的方法:

设置属性

用户在执行期间与应用程序的交互可能会影响属性设置。这些更改应反映在 Properties 对象中,以便在应用程序退出时保存它们(并调用 store 方法)。以下方法更改 Properties 对象中的属性:


注意: 上面描述的一些方法在 Hashtable 中定义,因此接受 String 以外的键和值参数类型。始终对键和值使用 String,即使该方法允许其他类型。也不要在 Properties 对象上调用 Hashtable.setHastable.setAll;始终使用 Properties.setProperty

Previous page: Configuration Utilities
Next page: Command-Line Arguments