Preferences API的使用.doc_第1页
Preferences API的使用.doc_第2页
Preferences API的使用.doc_第3页
Preferences API的使用.doc_第4页
Preferences API的使用.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Preferences API的使用概述应用程序往往需要存储一些偏好设定(如有些软件所称的“首选项”、“选项”等等)和配置信息,Preferences API就是干这个的。在Preferences API产生以前,我们一般是通过Properties API或者JNDI API来管理偏好设定和配置信息。但是这两种API要么在可移植性上存在不足,要么在简便性上存在不足,而Preferences API弥补了这些问题。Preferences API 是轻型的、跨平台的持久性 API,它是在 JDK 1.4中引入的。它不是为了为传统数据库引擎提供一个接口,而是用恰当的、操作系统特定的后端以实现真正的持久性。Preferences API 规范没有规定如何实现这个 API,只规定了它必须做什么。这个API针对不同的操作系统有不同的实现。Java 运行时环境的每一个实现(如win32版本和linux版本)对这个 API 都可以有不同的实现。如:Windows中的实现是将API数据存在注册表中,许多非注册表的实现将 API 数据存储在一个 XML 格式的文件中。Preferences API 使用层次树结构来存储数据。有两个数据树用户树和系统树。这两个树的行为完全相同,但是它们有不同的目的。系统树用于存储所有用户都可以使用的数据,而用户树对于每一个用户是不同的。层次树的起始点是一个根节点(根节点是树的根基,所有其他节点都是这个节点的后代)。节点可以包含命名的值(即键/值对类似于Map类型)以及其他节点。所有的程序都有一个共同的根节点,不同的程序将它们的数据存储在树的不同节点上。Preferences API 在java.util.prefs包中,可存储字符串、数字、布尔值、简单字节数组等。Preferences API 对可以存储在它里面的数据大小有限制。具体就是字符串限制为 MAX_VALUE_LENGTH个字符。字节数组限制为 MAX_VALUE_LENGTH 长度 75%,因为字节数组是通过编码为字符串存储的。键名限制为MAX_KEY_LENGTH个字符,节点名限制为MAX_NAME_LENGTH个字符。Preferences API还可以添加Preference或Node监听器,当Preference或Node改变时触发。代码演示/* * 这段程序演示了Preferences API的使用。底层为Windows。 */package com.lwj.prefs;import java.util.prefs.BackingStoreException;import java.util.prefs.NodeChangeEvent;import java.util.prefs.NodeChangeListener;import java.util.prefs.PreferenceChangeEvent;import java.util.prefs.PreferenceChangeListener;import java.util.prefs.Preferences;public class PreferencesDemo private static final String POSITION = postion;private static final int X_DEFAULT = 50, Y_DEFAULT = 25;public static void main(String args) /* * 访问系统树的根节点和用户树的根节点 * 如果根节点不存在,就建立;如果存在,就返回。 * 在Windows(我的为Windows XP SP2)中, * 这两个节点分别位于注册表的 * HKEY_LOCAL_MACHINESOFTWAREJavaSoftPrefs 和 * HKEY_CURRENT_USERSoftwareJavaSoftPrefs */Preferences systemRoot = Preferences.systemRoot();Preferences userRoot = Preferences.userRoot();System.out.println(systemRoot);System.out.println(userRoot);/* * 用PreferencesDemo的包名建立或访问一个子节点 * 如果子节点不存在,就建立;如果存在,就返回。 * 这个子节点的绝对路径名: /com/lwj/prefs */Preferences prefs = Preferences.userNodeForPackage(PreferencesDemo.class);System.out.println(prefs.absolutePath();/* * 在/com/lwj/prefs再建立或访问一个子节点 * 绝对路径名:/com/lwj/prefs/a */Preferences a = prefs.node(a);System.out.println(a.absolutePath();/* * 在a节点下建几个值,用于存配置数据 */ 存字符串a.put(Author, Lu Wujun);/返回字符串,get函数的第二个参数为找不到Author时的缺省值。System.out.println(a.get(Author, Lu Wujun);/ 存布尔值a.putBoolean(Exist, true);/ 返回布尔值System.out.println(a.getBoolean(Exist, true);/* * 如果存一个类似于坐标的复合值,要保证存复合值为一个原子操作, * 防止因停电、死机等原因出现的存储不完整等问题。 * 以下摘自JDK文档,这个配置数据存在/com/lwj/prefs中 */int x = 10, y = 20;prefs.put(POSITION, x + , + y);String position = prefs.get(POSITION, X_DEFAULT + , + Y_DEFAULT);try int i = position.indexOf(,);x = Integer.parseInt(position.substring(0, i);y = Integer.parseInt(position.substring(i + 1); catch (Exception e) / Value was corrupt, just use defaultsx = X_DEFAULT;y = Y_DEFAULT;System.out.println(position: + x + , + y);/* * 为/com/lwj/prefs添加一个Preference监听器 */prefs.addPreferenceChangeListener(new PreferenceChangeListener() public void preferenceChange(PreferenceChangeEvent pce) System.out.println(pce.getKey() + - + pce.getNewValue(););prefs.putInt(integer, 10);prefs.putInt(integer, 20);prefs.remove(integer);/* * 为/com/lwj/prefs添加一个Node监听器 */prefs.addNodeChangeListener(new NodeChangeListener() public void childAdded(NodeChangeEvent nce) System.out.println(Node added:ntparent= + nce.getParent()+ ntchild= + nce.getChild();public void childRemoved(NodeChangeEvent nce) System.out.println(Node removed:ntparent= + nce.getParent()+ ntchild= + nce.getChild(););Preferences b = prefs.node(b);try b.removeNode(); catch (BackingStoreException e1) / TODO Auto-generated catch blocke1.printStackTrace();/ 调用flush()保证存到后台的注册表或数据文件中try systemRoot.flush();userRoot.flush();prefs.flush();a.flush(); catch (BackingStoreException e) e.printStackTrace();运行结果System Preference Node: /User Preference Node: /com/lwj/prefs/com/lwj/prefs/aLu Wujuntrueposition:10,20integer - 10integer - 20integer - nullNode added:parent=User Preference Node: /com/lwj/prefschild=User Preference Node: /com/lwj/prefs/bNode removed:parent=User Preference Node: /com/lwj/prefschild=User Preference Node: /com/lwj/prefs/bWindows注册

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论