java.util.prefs.Preferences用法

来源:互联网 发布:法师雾化器 数据 编辑:程序博客网 时间:2024/06/14 09:30

简介

在软件开发过程中,我们可能需要保存一些用户设置信息,方便再下次打开软件是加载这些用户设置。

1. 原来保存用户设置信息

之前在项目中尝试过的做法是,在指定位置保存一个文件,通过键值读取文件信息:
- ini文件
- properties文件
- xml文件

2. Preferences保存用户设置信息

但实际上,早在JDK1.4就提供了Preferences类提供了存取注册表中的用户设定数据的机制。
注意: 我们调用Preferences同一个方法接口,在不同的平台中有不同的实现方式,有兴趣的可以去了解一下。

3. 建立Preferences对象

对应注册表 在Windows平台中,用户参数项在注册表中的根节点Preferences.userRoot()

  • 32位
HKEY_CURRENT_USER/Software/JavaSoft/Prefs
  • 64位
HKEY_CURRENT_USER/SOFTWARE/Wow6432Node/JavaSoft/Prefs

系统参数项在注册表中的根节点Preferences.systemRoot()

  • 32位
HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Prefs
  • 64位
HKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/JavaSoft/Prefs

而我们指定的节点路径是位于这些根节点之下的。

为了区分不同的应用程序的参数项,在建立Preferences时要指定一个节点路径。 Preferences是一个抽象类,提供了一系列静态方法和抽象方法来操作参数项:

抽象方法:

Preferences userData = Preferences.userNodeForPackage(this);Preferences sysData = Preferences.systemNodeForPackage(this);

这两个方法是从指定的物件所在的包(package)返回一个节点路径,如this是javax.swing.JComponent,则返回/javax/swing

静态方法:

Preferences userData = Preferences.userRoot().node("/com/cas/test");Preferences sysData = Preferences.systemRoot().node("/com/cas/test");

以上每种方式提供了两套操作方法。其中一套是用户参数项,另一套是系统参数项。

4. 读写数据

Preferences提供了多种类型数据的读写方法。

写入(put)的方法:

put(String key, String value)putBoolean(String key, boolean value)putByteArray(String key, byte value[])putDouble(String key, double value)putFloat(String key, float value)putInt(String key, int value)putLong(String key, long value)

读取(get)的方法:

get(String key, String default)getBoolean(String key, boolean default)getByteArray(String key, byte default[])getDouble(String key, double default)getFloat(String key, float default)getInt(String key, int default)getLong(String key, long default)

注意,每一种get方法的第二个参数需要我们为它指定缺省的参数。

5. 导出注册表数据

除了以上方式之外,Preferences还给我们提供了导出注册表数据保存为XML文件的方法:

void exportNode(OutputStream os)void exportSubtree(OutputStream os)

我们可以导出一个节点,或是导出整个子节点树。

6. 综合事例

import java.io.*;import java.util.prefs.*;public class PrefsDemo {    public static void main(String args[]) {        String keys[] = { "a", "b", "c" };        String values[] = { "1", "2", "3" };        Preferences prefsdemo = Preferences.userRoot().node("/com/cas/test");        for (int i = 0; i < keys.length; i++) {            prefsdemo.put(keys[i], values[i]);        }        try {            FileOutputStream fos = new FileOutputStream("test.xml");            prefsdemo.exportNode(fos);        } catch (Exception e) {            System.err.println("Cannot export nodes: " + e);        }    }}