在你进行开发不久就会发现自己需要一种保存Java应用程序执行信息的方法。数据库是满足这个目的的流行选择,但是对于少量的信息,使用用数据库就太大材小用了。Java专门提供了一个用于方便地保存文本文件里少量文本信息的类:java.util.Properties。想一想“应用程序属性(application
properties)”,你就会明白起这个名字的缘由。
Properties类本来就是一个强大的用于Hashtable的强类型包装程序,它允许把Hashtable的内容写到磁盘文件里,并在以后取回。如果你还不知道概念的话,Hashtable是一个集合,它用字符串键把集合的内容和你加到集合里的每个值关联起来。这应该让你能够了解到信息是如何被一个Properties实例所组织的:多组键、值对。
一个磁盘文集被分为几个部分,每一个部分对应于一组由你保存到文件里的属性。每个部分都有个时间戳,用于代表该部分最近一次更新的时间;此外每部分都含有一组键、值对,每个都代表你保存在那里的每个单独的属性。如果见过Windows风格的INI文件,你就会很熟悉这个结构。
预备知识已经足够了。让我们进正题看看Properties是如何工作的。要在Properties对象里保存一个属性,你就会用到setProperty方法,它接受值的键名和值本身。要取回属性,你就要用到getProperty,并把键传递给你要取回的值。通过举例,你可以用以下这样的代码来存储和取回一个叫做Builder的属性:
Properties p = new Properties(); p.setProperty(“Builder”, “Some Value”); String s = p.getProperty(“Builder”);
还记得我说过Properties是一个强类型Hashtable吗?只有在使用setProperty和getProperty时,你才局限于使用字符串值。
当然,以上的例子并不能保存跨程序运行的Builder属性的值。如果能是这样就好了,所以你自己还是要实实在在地创建一个文件(File)对象和所需的输入(input)和输出流(output streams)。Listing A的程序显示的是如何保存Windows里跨执行的一组属性。这段代码在其它操作系统上也应该能良好地工作,只要把文件的路径从“C:/temp”改到你平台所能适应的路径就行了。
如果你试图取回一个文件里并不存在的属性又会怎样呢?在这种情况下,getProperty方法会返回null。你当然可以在代码里查找null,但是如果属性文件里没有属性,而你能够以某种方式自动指定一个属性可以使用的缺省值,那就会更容易、更明了。
有两种方法可以实现这一点: