用Java属性存储应用程序的配置信息

ZDNet软件频道 时间:2002-10-29 作者:BUILDER.COM |  我要评论()
本文关键词:
在你进行开发不久就会发现自己需要一种保存Java应用程序执行信息的方法。Java专门提供了一个用于方便地保存文本文件里少量文本信息的类:java.util.Properties。

在你进行开发不久就会发现自己需要一种保存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吗?只有在使用setPropertygetProperty时,你才局限于使用字符串值。

当然,以上的例子并不能保存跨程序运行的Builder属性的值。如果能是这样就好了,所以你自己还是要实实在在地创建一个文件(File)对象和所需的输入(input)和输出流(output streams)。Listing A的程序显示的是如何保存Windows里跨执行的一组属性。这段代码在其它操作系统上也应该能良好地工作,只要把文件的路径从“C:/temp”改到你平台所能适应的路径就行了。

使用缺省的值

如果你试图取回一个文件里并不存在的属性又会怎样呢?在这种情况下,getProperty方法会返回null。你当然可以在代码里查找null,但是如果属性文件里没有属性,而你能够以某种方式自动指定一个属性可以使用的缺省值,那就会更容易、更明了。

有两种方法可以实现这一点:

  • Properties构造函数有一个过载,能够接受另一个Properties对象的实例。你可以在把这个对象传递给构造函数以前就把属性安置进去,这些属性就将被用作任何你要取回但是却未事先定义的属性所缺省的值。
  • getProperty方法的一个过载能够接受一个第二字符串参数,假如指定的属性不存在,这个参数就能被返回。

Listing A里的例子演示了这两个技巧。

属性的正确运用

最后给你一些在应用程序里使用Properties的小技巧:

  • 虽然Properties类拥有从Hashtable继承来的putputAll方法,它们会允许你把属性的值设置成String以外的类型,但是不要使用它们,否则你会碰到一组不能够打开的非法属性。
  • 不要在一个Properties集里保存复合信息,类似地,也不要在那里保存大量的信息。你最好在那里只存储最简单的配置信息,要保存大量的信息就使用“大炮”(数据库)吧。


本文为ZDNet China版权所有,未经许可严禁转载。

责任编辑:炒饭

欢迎评论或投稿


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134