java.util.prefs.Preferences用法

简介

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

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);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/zhuiyucanxin/article/details/77101155