JDK1.4下对WIN32注册表的访问实现

开发 后端
针对注册表的访问问题, Java 1.4有特殊的访问能力,使您能够操作用户首选项数据和配置数据。那么具体是什么呢?本文向你介绍JDK1.4下对WIN32注册表的访问实现。

针对注册表的访问问题, Java 1.4 增加的 java.util.prefs 包,通过提供对特定于实现的注册表(例如,Windows 平台上的 Windows 注册表)的访问能力,使您能够操作用户首选项数据和配置数据。

您是不是曾经需要保存程序的配置数据但却不知应将数据存储在哪里? 虽然您可以使用属性文件或资源束获取这些信息,但 Java 平台从未指定过用于存储这些文件的标准位置。JSR 10 出现后一切都变了,它为 Java 1.4 API 提供增加的 java.util.prefs 包。存储机制是特定于实现的细节,但程序员不必知道,也不必操心。对于 Windows 平台,它的位置是在“Windows 注册表”。 您虽然不能够对注册表自由控制,但您的确可以通过一个公共根节点访问所有的应用程序。

开始

命名很恰当的 Preferences 类提供操作首选项的基本框架。这个类提供了一系列静态和抽象方法来操作两套首选项(其中一套是用户首选项,另一套是系统首选项)中的其中一套。 使用静态方法,您会得到一个特定于平台的实现,就象 WindowsPreferences 类; 然后您可以使用由这个特定于平台的实现实现的抽象方法来做这项工作。

用包将程序的首选项分组是个好习惯,可以避免与其它应用程序的命名冲突。 当您查找 Preferences 对象时,只需传递包的名称。在使用非静态方法时, 您可以传递对自身的引用(this),程序将为您确定查找的是哪个包,如清单 1 所示。

清单 1. 从非静态方法获取 Preferences 对象

  1. Preferences userPrefs = Preferences.userNodeForPackage(this);  
  2. Preferences sysPrefs = Preferences.systemNodeForPackage(this); 

但是,如果您使用的是静态方法,您就必须得到根节点并自己提供包,如清单 2 所示。

清单 2. 从静态方法获取 Preferences 对象

  1. Preferences userPrefs = Preferences.userRoot().node("/net/zukowski/ibm");  
  2. Preferences sysPrefs = Preferences.systemRoot().node("/net/zukowski/ibm"); 

有了进行操作的节点后,您就可以轻松地设置、获取、除去和转储设置选项。只要把 Preferences 对象当作一个大的键 — 值散列表(这个表把树形结构中的键组织起来)。可它不是“集合框架”( Collections Framework)的部件,(关于“集合框架”的更多信息,请参阅参考资料)。

写数据

我们将从讨论如何存储首选项开始。Preferences 类提供一系列 put() 方法,如下所示,用于存储值。除支持基本的字符串之外,您还可以存储布尔值、双精度数、浮点数、整型数、长整型数和字节数组(考虑序列化)。助手方法采用适当的数据类型并执行必要的转换以便将数据存储为字符串。

  1. put(String key, String value)   
  2. putBoolean(String key, boolean value)   
  3. putByteArray(String key, byte value[])   
  4. putDouble(String key, double value)   
  5. putFloat(String key, float value)   
  6. putInt(String key, int value)   
  7. putLong(String key, long value) 

所有的 put() 方法都返回一个 void。如果存储机制不可用,将抛出一个BackingStoreException。

注意:一个特定首选项的键长度被限制为 Preferences.MAX_KEY_LENGTH(80)个字符,而它的值被限制为 Preferences.MAX_VALUE_LENGTH(8192)个字符。

读数据

可通过下面所示的一系列 get() 方法获取特定的首选项。与写数据相似,每种受支持的数据类型,都有自己的与众不同的方法。但与获取数据时不同的是,在备用存储不可用,或有些东西尚未保存时您必须提供缺省值。这要求您确保自己的程序至少要有合理的缺省设置选项。

  1. get(String key, String default)   
  2. getBoolean(String key, boolean default)   
  3. getByteArray(String key, byte default[])   
  4. getDouble(String key, double default)   
  5. getFloat(String key, float default)   
  6. getInt(String key, int default)   
  7. getLong(String key, long default

如果您对首选项名称不确定,您可以用 keys() 方法查找一列与节点相关联的键。这个方法返回节点的 String[]。 除获取和存储个别首选项以及获取一列关键字之外,您还可以用 clear()、remove() 和 removeNode() 除去节点和值。

转储数据

如果您想在系统提供的备用存储器之外保存和恢复首选项,您可以在 XML 格式的文档中执行这些操作。您可以用 exportNode() 导出一个节点或用 exportSubtree() 导出整个子树。信息以 UTF-8 格式存储。然后,当您想恢复信息时,可使用 importPreferences() 方法。

侦听

“好奇心会害死一只猫”,但如果您对弄清除首选项何时改变很感兴趣,您可以注册一个 NodeChangeListener 或 PreferenceChangeListener,而不考虑随之而来的后果。NodeChangeListener 负责通知您节点被添加和除去的时间, 而 PreferenceChangeListener 告诉您值的变化。这些都紧跟着基本 JavaBeans 组件事件用 add/removeNodeChangeListener(NodeChangeListener) 和 add/removePreferenceChangeListener() 方法处理结构之后发生。基本上,您先实现侦听器,然后注册侦听器,这样您会发现将来的变化。

那么通过介绍JDK1.4下对WIN32注册表的访问实现,大家是不是对这个JDK1.4的特殊能力感兴趣呢?
 

【编辑推荐】

  1. JDK1.6在LINUX下的安装配置
  2. JDK1.5中新的语言特征浅析
  3. 在JDK7 b50中将实现正则表达式命名捕获组
  4. JDK日志框架介绍及其主要功能浅析
  5. JDK日志框架之自定义日志Handler浅析
责任编辑:仲衡 来源: 百度空间
相关推荐

2009-07-07 11:17:14

JDK1.4环境配置

2009-07-09 11:43:22

JDK1.4assert

2009-07-09 09:09:46

JDK1.4

2009-02-01 10:10:00

Java资格认证JDK1.4JDK1.6

2009-07-09 11:21:08

JDK1.4安装图解

2010-05-25 17:45:00

MySQL备份

2011-04-21 09:10:16

2012-05-10 17:01:24

Win XP注册表

2009-10-12 16:08:14

VB.NET访问注册表

2009-10-16 09:40:54

VB.NET访问注册表

2009-07-07 12:09:04

注册表开发.NET Compac

2011-08-04 17:04:42

2011-09-16 14:22:31

注册表windowsVist

2011-08-04 16:37:09

注册表编辑器注册表

2011-08-03 18:01:40

注册表

2011-08-03 15:40:09

注册表注册表编辑器

2009-10-22 18:09:10

linux虚拟机

2009-07-22 18:55:29

2009-08-28 15:45:32

C#操作Win32 A

2009-08-21 09:43:49

C#编辑注册表
点赞
收藏

51CTO技术栈公众号