管理Preferences 让人非常头痛。你需要做很多决策,并且你经常每时每刻都要改变你的决定来解决发生的问题从而使它尽善尽美。
在JAVA1.4版本中,新的Preferences包试图解决一些重要问题——在什么地方存放preferences类和怎么访问它们。Preferences API不是一个完美的解决方案,但是它确实是一个好的开始。
参数被分为两种类型:用户参数,它由每个用户自己管理;系统参数,它仅有一种设置。参数有树的结点来管理,类似于一个文件系统。这里有一个系统根结点和用户根结点。
我们来逐步的了解Preferences包,这需要返回和存储Preferences。为了简单明了,我们仅举系统参数来说明。但是用户参数的结构跟这个几乎完全一样。
在你访问一个Preference的时候,你首先必须访问java.util.pref.Preferences的结点,这个结点包含了你需要的设置。为了完成这个步骤,必须调用参数类的静态方法。有两种返回参数结点的静态方法:一种是使用java.lang.Class类,另一种是不使用引数,直接返回根结点。
Preferences prefs = Preferences.systemNodeForPackage(PreferencesTip.class);
Preferences prefs = Preferences.systemRoot();
如果你使用第二种方法,你必须使用另外一个调用取得结点,你可以这么做:
Preferences prefs = Preferences.systemRoot().node(pathName);
如果你找到了结点,返回属性就非常简单了:
String value = prefs.get(preferenceName, defaultValue);
我们可以看到,使用这种方法要使用两个引数:一个是字符串类型,它表示你需要访问的参数的名字;另一个是默认值,当你需要调用的参数没有找到的时候会返回它。所有参数类get()都是按照这种方式来完成。下面的列表是javadoc参数的get():
getBoolean(String key, boolean def)
getByteArray(String key, byte[] def)
getDouble(String key, double def)
getFloat(String key, float def)
getInt(String key, int def)
getLong(String key, long def)
设置一个参数就好像返回它一样简单。为了设置参数,调用适当的put()。Put()和get()刚好相反。来看个例子:
prefs.putInt(preferenceName,1234);
在你开始使用Preferences API之前,你要考虑如何给你的参数结点命名。结点的命名基于包,如果你返回的结点是经过Class类,最好使用默认的名字。尽管你可以更改包的名字,可是,你可能需要将旧的参数移到新的结点名中。
Preferences API解决了为时以久的问题。大家可以看看javadoc,因为它有很多这里没有介绍的内容。除了返回和保存属性之外,你还可以导入导出结点,转移结点,监控参数的变化等等功能。