g 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)
如果您对首选项名称不确定,您可以用 keys() 方法查找一列与节点相关联的键。这个方法返回节点的 String[]。 除获取和存储个别首选项以及获取一列关键字之外,您还可以用 clear()、remove() 和 removeNode() 除去节点和值。
转储数据
如果您想在系统提供的备用存储器之外保存和恢复首选项,您可以在 XML 格式的文档中执行这些操作。您可以用 exportNode() 导出一个节点或用 exportSubtree() 导出整个子树。信息以 UTF-8 格式存储。然后,当您想恢复信息时,可使用 importPreferences() 方法。
侦听
“好奇心会害死一只猫”,但如果您对弄清除首选项何时改变很感兴趣,您可以注册一个 NodeChangeListener 或 PreferenceChangeListener,而不考虑随之而来的后果。NodeChangeListener 负责通知您节点被添加和除去的时间, 而 PreferenceChangeListener 告诉您值的变化。这些都紧跟着基本 JavaBeans 组件事件用 add/removeNodeChangeListener(NodeChangeListener) 和 add/removePreferenceChangeListener() 方法处理结构之后发生。基本上,您先实现侦听器,然后注册侦听器,这样您会发现将来的变化。
完整的示例
真的就这些。清单 3 为您提供了一个完整的示例来试验新功能(也可从参考资料下载)。程序运行后会自己清除,所以如果您想在注册表中找到值,请注释掉程序尾部的清除代码。
清单 3. 完整的示例
package net.zukowski.ibm;
import java.io.*;
import java.util.prefs.*;
public class Prefs {
public static void main(String args[]) {
String denominations[] =
{"One", "Two", "Five", "Ten", "Twenty"};
String pictures[] =
{"Washington", "Jefferson", "Lincoln", "Hamilton", "Jackson"};
NodeChangeListener nodeChangeListener =
new NodeChangeListener() {
public void childAdded(NodeChangeEvent event) {
Preferences parent = event.getParent();
Preferences child = event.getChild();
System.out.println(parent.name() + " has a new child " +
child.name());
}
public void childRemoved(NodeChangeEvent event) {
Preferences parent = event.getParent();
Preferences child = event.getChild();
System.out.println(parent.name() + " lost a child " +
child.name());
}
};
PreferenceChangeListener preferenceChangeListener =
new PreferenceChangeListener() {
public void preferenceChange(PreferenceChangeEvent event) {
String key = event.getKey();
String value = event.getNewValue();
Preferences node = event.getNode();
System.out.println(node.name() + " now has a value of " +
value + " for " + key);
}
};
// Look up user root
Preferences prefs =
Preferences.userRoot().node("/net/zukowski/ibm");
// Add listeners
prefs.addNodeChangeListener(nodeChangeListener);
prefs.addPreferenceChangeListener(preferenceChangeListener);
// Save a bunch of key-value pairs
for (int i=0, n=denominations.length; i < n; i++) {
prefs.put(denominations[i], pictures[i]);
}
// Display all the entries
try {
String keys[] = prefs.keys();
for (int i=0, n=keys.
|