用 Preferences API 存储对象

用 Preferences API 存储对象

ID:37787245

大小:25.24 KB

页数:6页

时间:2019-05-31

用 Preferences API 存储对象_第1页
用 Preferences API 存储对象_第2页
用 Preferences API 存储对象_第3页
用 Preferences API 存储对象_第4页
用 Preferences API 存储对象_第5页
资源描述:

《用 Preferences API 存储对象》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、为什么设计PreferencesAPI?如果说PreferencesAPI主要是为让Java程序访问MicrosoftWindows注册表而创建的,一定会让人感到意外。为什么我要这么说呢?这个API的设计类似于Windows注册表,本文前三段中的大部分说明也同样适用于注册表。不过,PreferencesAPI就像所有Java语言一样,是以跨平台为目的的,所以它在非Windows系统上至少可以工作得一样好(当然,本文中的代码是跨平台的)。PreferencesAPI规范没有规定如何实现这个API,只规定了它必须做什么。Java运行时环境

2、(JavaRuntimeEnvironmentJRE)的每一个实现对这个API都可以有不同的实现。许多非注册表的实现将API数据存储在一个XML格式的文件中,这个文件也许是在用户的主目录中或者在一个共享目录中。与Windows注册表一样,PreferencesAPI使用层次树结构来存储数据。起始点是一个 rootnode (根节点是树的根基,所有其他节点都是这个节点的后代)。节点可以包含命名的值以及其他节点。不同的程序将它们的数据存储在树的不同位置上,所以它们不会彼此冲突。正如我们将要看到的,PreferencesAPI采用了特殊的方

3、法帮助防止这种冲突。我们将首先简单看一下PreferencesAPI是如何工作的以及如何使用它。使用Preferences理解PreferencesAPI的最好方法是使用它。需要做的第一件事是访问根节点:Preferencesroot=Preferences.userRoot();这一行代码返回数据树的 userroot。前面我们说系统中的所有数据都存储在一个树中。不过,这并不完全正确--事实上,有 两个数据树--用户树和系统树。这两个树的行为完全相同,但是它们有不同的目的。系统树用于存储所用户都可以使用的数据,而用户树对于每一个用户

4、是不同的。这两个树天生就有不同的目的。您要将字体首选项存储在用户树中,因为这是用户特定的内容。另一方面,您要将程序位置存储在系统树中,因为位置对于所有用户是相同的,并且所有用户都可能用到它。小型程序会使用系统树或者用户树,但是不会同时使用这两者。大型应用程序可能同时使用这两种树。在本文中,我们将只针对用户树,要记住用户和系统树的行为是一样的。现在让我们看一下如何用PreferencesAPI读取和写入简单的值。获得一个值当您得到根节点后,就用它读取和写入值。下面是如何写入一个字体大小:root.putInt("fontsize",10

5、);下面是在这之后将它读出来的方法:intfontSize=prefs.getInt("fontsize",12);注意 getInt() 需要一个默认值--在这里是12。当然,您可以读取和写入整数之外的值。可以读取和写入许多基本Java类型。还可以将节点存储在其他节点中,如这个例子所示:Preferenceschild=parent.node("child");这就是PreferencesAPI的全部内容--剩下的就是细节使用了,我们将在下一节讨论其中一个细节。获得一个包的节点不难想像两个不同的程序员可能希望存储不同的字体大小,如果

6、他们决定以同一个名字“fontsize”存储他们的值,那么我们就有问题了。一个程序的首选项会影响另一个程序。解决方法是将内容存储在包特定的位置上,像这样:PreferencesourRoot=Preferences.userNodeForPackage(getClass());userNodeForPackage() 方法取一个 Class 对象并返回这个类特定的节点。这样,每一个应用程序--假定它是在其自己的包中--都会有自己的首选项节点。对于PreferencesAPI的工作方式有了很好的了解后,我们还需要知道如何扩展它以便对对象

7、进行处理。存储对象这就是我们希望将对象写入Preferences树的理想方法:清单1.将对象写入Preferences树的理想方法Fontfont=newFont(...);Preferencesprefs=Preferences.userNodeForPackage(getClass());prefs.putObject("font",font);不过,不幸的是,Preferences对象没有 putObject() 和 getObject() 方法。但是我们会尽量做到接近这一点。我们将在一个名为 PrefObj的类中实现这些方法。

8、以下是我们的做法:清单2.实现putObject()和getObject()Fontfont=newFont(...);Preferencesprefs=Preferences.userNodeForPackage(ge

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。