`

Preferences 与 注册表

    博客分类:
  • Java
阅读更多

Preferences API在底层到底使用的存储机制,依赖于具体情况。Preferences API允许不同的存储层次来存储原始数据,称为辅助存储器。为Preference节点提供的缺省的后台存储依赖于运行代码的系统:对于MS Windows,缺省的后台存储是注册表
example:
(下面注释掉的那段代码给恢复, 就能把写入的注册键值删除, 很方便啊) 
至于读注册表项, 比写还方便, 查JDK API文档吧.. 
// PrefsDemo.java 
import java.io.*; 
import java.util.prefs.*; 
public class PrefsDemo { 
public static void main(String args[]) 

  String keys[] ={"sunway","copyright","author"}; 
  String values[] ={"sunway technology company","copyright 2002","turbochen@163.com"}; 
  /* 建立一个位于user root下的/com/sunway/spc节点参数项*/ 
  Preferences prefsdemo =Preferences.userRoot().node("/com/sunway/spc"); 
  /* 储存参数项*/ 
  for (int i=0 ; i < keys.length; i++) 
  { 
   prefsdemo.put(keys, values); 
  } 
  /* 导出到XML文件 */ 
  try 
  { 
   FileOutputStream fos = new FileOutputStream("prefsdemo.xml"); 
   prefsdemo.exportNode(fos); 
  } catch (Exception e) 
  { 
   System.err.println("Cannot export nodes: " + e); 
  } 
  /* 去掉注释可以清除注册表中的参数项*/ 
  /*try 
  { 
   prefsdemo.removeNode(); 
  } catch (BackingStoreException e) 
  { 
  }*/ 


  
备注:
用Preferences来管理首选项数据 
来自http://java.csdn.net/page/41f5be4f-5a81-4cea-bbdb-4789a1226012
从JDK 1.4开始,提供了新的java.util.prefs.Preferences(及其相关的)类,它能够为保存首选项数据提供一个不错的解决方案。
使用Preferences API非常直观,如下面代码所示:
//All Preferences classes come from java.util.prefs
//Read a configuration value
Preferences prefs = Preferences.systemNodeForPackage(this.getClass()); 
String url = prefs.get("databaseURL", ""); 
Preferences API会区分系统数据和用户数据。系统首选项数据作用在整个机器范围内,通常存储的典型信息可能包括应用程序的安装配置等数据,并由所有用户共享。而用户首选项数据则针对每个用户,并随当前用户的不同而改变,通常存储的典型信息可能包括特定应用程序的字体选择、颜色选择和首选窗口的位置及大小等。
Preferences以层次节点的方式组织,类似于XML Infoset元素。通过把节点放入不同层次的包中,首选项元素可以被划分成不同的可管理块,以便于进行管理。Preferences API具有一些工具方法,可以遍历Preferences树以查找与类的包名匹配的Preferences节点。一旦发现了正确的Preferences节点,就能够得到与键“databaseURL”关联的值;如果没有发现这个键,就会返回缺省值,这个值将作为方法调用的第二个参数被返回,其目的是,为了保证内部存储不可用时,应用程序也可以正常运行。
Preferences API在底层到底使用的存储机制,依赖于具体情况。Preferences API允许不同的存储层次来存储原始数据,称为辅助存储器。为Preference节点提供的缺省的后台存储依赖于运行代码的系统:对于MS Windows,缺省的后台存储是注册表;在UNIX 系统中,大部分Java 虚拟机依然使用文本文件,存储在用户的本地目录或整个机器的/etc 或/user/etc目录,这取决于该系统的Java 虚拟机和UNIX 文件系统的具体规范。
首选项树的每个节点都具有一个节点名(不必是唯一的)、一个唯一的绝对路径名和一个相对于每个祖先(包括它自己)的路径名。根节点的节点名为空字符串("")。每个其他节点的节点名可以在创建时任意指定。此名称的唯一限制是,它不能是空字符串,也不能包含斜杠字符('/')。根节点的绝对路径名为 "/"。根节点的子节点的绝对路径名是 "/" + <节点名>。所有其他节点的绝对路径名是<父节点的绝对路径名> + "/" + <节点名>。
注意: 
·任何相对路径名的第一个字符都不能是斜杠。 
·每个节点相对于自身的路径名都是空字符串。 
·每个节点相对于父节点的路径名就是其节点名,根节点除外,因为它没有父节点。 
·每个节点相对于根的路径名都是其移除开头斜杠的绝对路径名。 
·任何路径名均不能包含多个连续的斜杠字符。 
·任何路径名均不能以斜杠字符结尾,根的绝对路径名除外。
Preferences API除了能够存储字符串之外,还能够存储字节数组,这对于存储可序列化的对象非常方便。此外,Preferences API 还允许我们注册事件回调实例(实现PreferencesChangeListener接口的类),当发生修改Preferences数据的事件时,这些实例将被调用。通过这一机制,可以使得当首选项数据发生改变时不需要重启服务器来使修改生效,即给与我们实时配置应用程序的能力。
如果不想把数据存储在Windows注册表或本地的文件系统中,可以使用自定义的Preference类,从而把数据写入到其它地方,包
括关系型数据库或LDAP服务器。这里的自定义Preference类必须继承自AbstractPreferences。
每个Preferences实现都必须具有一个关联的PreferencesFactory实现。每个Java(TM) SE实现都必须提供一些方式,来指定将哪个 PreferencesFactory 实现用于生成根首选项节点。这允许管理员使用替代实现替换默认首选项实现。 
实现注意事项:在 Sun 的 JRE 中,PreferencesFactory 实现的位置如下:
1、如果定义了系统属性java.util.prefs.PreferencesFactory,则该属性名就会用作实现PreferencesFactory接口的类的完全限定名。加载并实例化该类;如果此进程失败,则抛出未指定的错误。
2、如果在对系统类加载器可见的jar文件中安装了PreferencesFactory实现类文件,并且该jar文件在资源目录META-INF/services中包含名为java.util.prefs.PreferencesFactory的提供者配置文件,则采用在该文件中指定的第一个类名称。如果提供了一个以上这样的jar文件,则使用找到的第一个文件。加载并实例化该类;如果此进程失败,则抛出未指定的错误。
3、最后,如果既没有提供上述系统属性也没有提供扩展jar文件,则加载和实例化底层平台的系统级默认PreferencesFactory实现。
修改首选项数据的所有方法都允许进行异步操作;它们可能立即返回,但是更改最终将传播到持久内部存储中,其延迟取决于实现。可以使用flush方法同步地将更新强制同步到内部存储中。Java虚拟机的正常终止不会 导致挂起更新的丢失,即在终止时不需要进行显式flush调用来使挂起更新变得持久。单个JVM中的多个线程可以同时调用此类中的方法,无需进行外部同步,其结果等效于某些顺序执行。如果在同一个内部存储中存储其首选项数据的多个JVM同时使用此类,则数据存储也不会遭到破坏,但首选项数据的一致性难以得到保证。
用Preferences API还可以将首选项数据导出成XML格式,也可以从XML或其他类似的结构中导入数据。通过这种方式可以在机器间方便地传递首选项数据,也可以对首选项数据进行备份和恢复。
其XML文档的DOCTYPE声明如下:
注意,导入或导出首选项时不访问系统URI(http://java.sun.com/dtd/preferences.dtd);该系统URI仅作为一个唯一标识DTD的字符串: 





type (system|user) #REQUIRED >


name CDATA #REQUIRED >



key CDATA #REQUIRED
value CDATA #REQUIRED >

分享到:
评论

相关推荐

    分享关于JAVA 中使用Preferences读写注册表时要注意的地方

    4. **备份与恢复**:可以通过`exportNode()`和`importNode()`方法导出和导入Preferences数据,这在迁移或恢复配置时非常有用。 5. **异常处理**:在进行读写操作时,应妥善处理可能出现的`BackingStoreException`,...

    浅谈Java读写注册表的方式Preferences与jRegistry

    本文将探讨Java中读写注册表的两种方式:Preferences API和jRegistry工具。 首先,需要明确的是,Java的跨平台特性意味着编写一次程序就可以在不同的操作系统上运行。然而,当涉及到读写注册表时,就可能会影响到...

    java操作注册表

    Java 操作 Windows 注册表 Java 语言是一种跨平台的编程语言,但是在实际的编程中,我们经常需要在 ...Java 不能直接任意操作 Windows 注册表,其中 java.util.prefs 中的 Preferences 类只可以操作部分注册表。

    使用Java操作Windows注册表

    Java从JDK 1.4版本开始引入了一个名为`Preferences`的类,该类提供了方便的方式来管理和操作用户的首选项,其中包括对Windows注册表的操作。 `Preferences`类提供了一个层次化的键值对存储系统,允许我们创建、读取...

    java注册表修改

    在Java中,通过`java.util.prefs.Preferences`类可以实现与注册表的交互,包括读取、写入和删除键值等操作。 ### 代码示例解析 在给定的部分内容中,我们看到了一个名为`PrefsDemo`的Java类,该类展示了如何使用...

    Java操作windows注册表

    ### Java操作Windows注册表:深入理解与实践 在IT领域,特别是软件开发中,了解如何使用Java语言操作Windows注册表是一项关键技能。Windows注册表是Windows操作系统的核心组件之一,用于存储系统和应用程序设置的...

    Java直接访问Windows注册表

    Jave的Preferences只在Software\JavaSoft\Prefs操作,反射WindowsPreferences能够操作Windows注册表的其他节点. 方法: 1.public static void put(int root,String path,String key,String val) 2.public static ...

    数据存储之Preferences

    Preferences通常用于保存应用程序中的键值对,类似于桌面操作系统的注册表或配置文件。这篇内容我们将深入探讨Android中的Preferences数据存储。 一、Preferences的类型 Preferences主要分为两种类型:...

    java注册表读写

    对于Java程序来说,虽然不直接访问系统的注册表,但可以通过Java平台提供的`java.util.prefs.Preferences`类来模拟这一功能。这种方式不仅限于Windows系统,也适用于其他操作系统,如Linux或Mac OS。 #### 三、...

    使用java修改windows注册表实用.pdf

    - **缺点**:只能操作与Java相关的注册表节点,无法编辑整个注册表。 5. **参考资料**: - IBM Developer上的一篇文章:“[用Preferences API存储对象]...

    修改注册表

    ### 修改注册表:深入理解与操作 #### 注册表概览 注册表是Windows操作系统中一个重要的数据库,用于存储系统和应用程序的配置信息。它包含了系统运行所需的各种参数,包括硬件配置、用户设置、应用程序配置等。...

    java下操作注册表方法优质资料.doc

    Java 操作注册表主要涉及到 `java.util.prefs` 包中的 `Preferences` 类,这是一个用于存储用户和系统首选项的接口。从 JDK 1.4 开始,Java 提供了这个包来支持跨平台的首选项存储,允许开发者在不依赖特定操作系统...

    使用java修改windows注册表.pdf

    本文将详细介绍三种主要的方法:使用`java.util.prefs.Preferences`API、通过命令行导入注册表文件(`.reg`文件)以及使用第三方库如gdapi。 #### 二、方法1:使用`java.util.prefs.Preferences` `java.util.prefs....

    使用java修改windows注册表.doc

    - 通过`Preferences`,可以将程序相关的配置信息保存到Windows注册表中。 **步骤**: 1. **创建Preference对象**:通过调用`Preferences.systemRoot()`或`Preferences.userRoot()`获取根节点。 2. **设置键值对**:...

    用java操纵注册表.pdf

    应用程序可以通过Preferences类提供的方法来读取和写入注册表,例如使用put(String key, String value)来存储字符串值,使用putInt(String key, int value)和putDouble(String key, double value)等方法来存储其他...

    利用JAVA向注册表里写信息

    这意味着通过Preferences API存储的数据会被保存到Windows注册表中,从而使得Preferences API具备了访问注册表的能力。然而,这种能力依赖于特定的JDK实现,因此并不具有跨平台性或通用性。 **优点**: - 简单易用...

    Java中使用Preferences 的 API设置用户偏好

    在Windows系统中,`Preferences` API使用注册表来保存信息,而在Unix/Linux系统中,信息通常存储在用户的家目录下的一个隐藏文件中。这样保证了用户特定的设置不会影响其他用户,同时也使得应用程序能在用户的不同...

    安装程序制作工具CreateInstall v7.3.2中文版.rar

    如设置程序安装后的输出文件夹,安装程序的图标,应用程序的名称及版本,安装程序语言及密码,安装弹出的对话框及快捷方式,添加到注册表项及可执行卸载程序等,支持创建安装程序解压缩器。可创建安装脚本及卸载脚本...

    UninstallTool

    "UninstallTool"是一款高效的绿色卸载工具,其主要功能在于帮助用户彻底卸载计算机上的应用程序,并在卸载过程中清理与之相关的注册表残留。这一特性对于保持系统整洁和优化性能至关重要,因为常规的卸载程序往往...

Global site tag (gtag.js) - Google Analytics