这些Java教程是针对JDK 8编写的。本页面中描述的示例和实践不利用后续版本引入的改进,并可能使用不再可用的技术。
请参阅Java语言更改,了解Java SE 9及其后续版本中更新的语言特性的摘要。
请参阅JDK发布说明,了解所有JDK版本的新功能、增强功能和已删除或弃用选项的信息。
属性是以键/值对的形式管理的配置值。在每个键/值对中,键和值都是String
值。键用于标识和检索值,就像变量名用于检索变量的值一样。例如,一个能够下载文件的应用程序可能会使用一个名为“download.lastDirectory”的属性来跟踪上次下载使用的目录。
要管理属性,请创建java.util.Properties
的实例。该类提供以下方法:
Properties
对象中,有关流的介绍,请参阅I/O Streams部分和基本I/O课程。
Properties
扩展了java.util.Hashtable
。从Hashtable
继承的一些方法支持以下操作:
Properties
对象中,Properties
列表中,Properties
对象是否为空。System
类维护一个Properties
对象,该对象定义了当前工作环境的配置。有关这些属性的更多信息,请参阅系统属性。本节的其余部分将解释如何使用属性来管理应用程序配置。
下图演示了一个典型应用程序在其执行过程中如何使用Properties
对象管理其配置数据。
启动
Properties
对象中。通常,默认属性存储在磁盘上的文件中,与应用程序的.class
和其他资源文件一起存储。Properties
对象,并加载上次运行应用程序时保存的属性。许多应用程序将属性按用户存储,因此在此步骤中加载的属性通常位于用户主目录中由该应用程序维护的特定目录中的特定文件中。最后,应用程序使用默认和记忆的属性来初始化自身。运行
Properties
对象会更新以反映这些更改。如果要记住用户更改以供以后的会话使用,则必须保存这些更改。退出
下面的Java代码执行了前面部分描述的前两个步骤:加载默认属性和加载已记住的属性:
. . . // 创建并加载默认属性 Properties defaultProps = new Properties(); FileInputStream in = new FileInputStream("defaultProperties"); defaultProps.load(in); in.close(); // 创建具有默认值的应用程序属性 Properties applicationProps = new Properties(defaultProps); // 现在从上次调用中加载属性 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, "---没有注释---"); out.close();
store
方法需要一个用于写入的流,以及一个字符串作为输出顶部的注释。
一旦应用程序设置了它的Properties
对象,应用程序可以查询该对象以获取有关它包含的各个键和值的信息。应用程序在启动后从Properties
对象中获取信息,以便根据用户的选择进行初始化。Properties
类有几种获取属性信息的方法:
contains(Object value)
和containsKey(Object key)
Properties
对象中,则返回true
。Properties
继承了这些方法来自Hashtable
。因此,它们接受Object
参数,但只应使用String
值。getProperty(String key)
和getProperty(String key, String default)
list(PrintStream s)
和list(PrintWriter w)
elements()
、keys()
和propertyNames()
Properties
对象中包含的键或值(根据方法名指示)的Enumeration
。keys
方法只返回对象本身的键;propertyNames
方法还返回默认属性的键。stringPropertyNames()
propertyNames
,但返回一个Set<String>
,只返回键和值都为字符串的属性名称。请注意,Set
对象不由Properties
对象支持,因此对其中一个的更改不会影响另一个。size()
用户在应用程序执行过程中与应用程序的交互可能会影响属性设置。这些更改应该反映在Properties
对象中,以便在应用程序退出时保存(并调用store
方法)。以下方法更改Properties
对象中的属性:
setProperty(String key, String value)
Properties
对象中。remove(Object key)
Hashtable
中定义的,因此可以接受除String
以外的键和值的参数类型。即使方法允许其他类型,也应始终使用String
作为键和值。也不要在Properties
对象上调用Hashtable.set
或Hastable.setAll
方法;始终使用Properties.setProperty
方法。