- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
用 Preferences API 存储对象
为什么设计 Preferences API?如果说 Preferences API 主要是为让 Java 程序访问 Microsoft Windows 注册表而创建的,一定会让人感到意外。为什么我要这么说呢?这个 API 的设计类似于 Windows 注册表,本文前三段中的大部分说明也同样适用于注册表。不过,Preferences API 就像所有 Java 语言一样,是以跨平台为目的的,所以它在非 Windows 系统上至少可以工作得一样好(当然,本文中的代码是跨平台的)。Preferences API 规范没有规定如何实现这个 API,只规定了它必须做什么。Java 运行时环境(Java Runtime Environment JRE)的每一个实现对这个 API 都可以有不同的实现。许多非注册表的实现将 API 数据存储在一个 XML 格式的文件中,这个文件也许是在用户的主目录中或者在一个共享目录中。与 Windows 注册表一样,Preferences API 使用层次树结构来存储数据。起始点是一个?root node?(根节点是树的根基,所有其他节点都是这个节点的后代)。节点可以包含命名的值以及其他节点。不同的程序将它们的数据存储在树的不同位置上,所以它们不会彼此冲突。正如我们将要看到的,Preferences API 采用了特殊的方法帮助防止这种冲突。我们将首先简单看一下 Preferences API 是如何工作的以及如何使用它。使用 Preferences理解 Preferences API 的最好方法是使用它。需要做的第一件事是访问根节点:Preferences root = Preferences.userRoot();这一行代码返回数据树的?user root。前面我们说系统中的所有数据都存储在一个树中。不过,这并不完全正确 -- 事实上,有?两个数据树 -- 用户树和系统树。这两个树的行为完全相同,但是它们有不同的目的。系统树用于存储所用户都可以使用的数据,而用户树对于每一个用户是不同的。这两个树天生就有不同的目的。您要将字体首选项存储在用户树中,因为这是用户特定的内容。另一方面,您要将程序位置存储在系统树中,因为位置对于所有用户是相同的,并且所有用户都可能用到它。小型程序会使用系统树或者用户树,但是不会同时使用这两者。大型应用程序可能同时使用这两种树。在本文中,我们将只针对用户树,要记住用户和系统树的行为是一样的。现在让我们看一下如何用 Preferences API 读取和写入简单的值。获得一个值当您得到根节点后,就用它读取和写入值。下面是如何写入一个字体大小:root.putInt( fontsize, 10 );下面是在这之后将它读出来的方法:int fontSize = prefs.getInt( fontsize, 12 );注意?getInt()?需要一个默认值 -- 在这里是12。当然,您可以读取和写入整数之外的值。可以读取和写入许多基本 Java 类型。还可以将节点存储在其他节点中,如这个例子所示:Preferences child = parent.node( child );这就是 Preferences API 的全部内容 -- 剩下的就是细节使用了,我们将在下一节讨论其中一个细节。获得一个包的节点不难想像两个不同的程序员可能希望存储不同的字体大小,如果他们决定以同一个名字“font size”存储他们的值,那么我们就有问题了。一个程序的首选项会影响另一个程序。解决方法是将内容存储在包特定的位置上,像这样:Preferences ourRoot = Preferences.userNodeForPackage( getClass() );userNodeForPackage()?方法取一个?Class?对象并返回这个类特定的节点。这样,每一个应用程序 -- 假定它是在其自己的包中 -- 都会有自己的首选项节点。对于 Preferences API 的工作方式有了很好的了解后,我们还需要知道如何扩展它以便对对象进行处理。存储对象这就是我们希望将对象写入 Preferences 树的理想方法:清单 1. 将对象写入 Preferences 树的理想方法Font font = new Font( ... );Preferences prefs = Preferences.userNodeForPackage( getClass() );prefs.putObject( font, font );不过,不幸的是,Preferences 对象没有?putObject()?和?getObject()?方法。但是我们会尽量做到接近这一点。我们将在一个名为?PrefObj的类中实现这些方法。以下是
文档评论(0)