java.util.prefs.Preferences用法

本文介绍了如何使用Java的Preferences API来保存和读取用户的设置信息。包括创建Preferences对象、读写不同类型的数据、导出注册表数据到XML文件等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

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

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);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值