`
m635674608
  • 浏览: 5029013 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

java.util.Preferences

    博客分类:
  • java
 
阅读更多
JDK1.4为我们提供的java.util.prefs包,里面有一个Preferences类,能让以上的工作变得极其轻松!
写VB程序的人常常用SaveSetting函数和getSettging来存取注册表中的用户设定数据。而Java的Preferences类也提供了类似的机制。
Preferences类在不同的平台中有不同的实现方式。而在Windows平台中,Preferences是将数据保存在注册表中的,而在其它平台中的实现我就不得而知了(我对Linux等系统都不太了解).
但不管怎样,都是通过相同的接口来使用的,程序作者可以不管实现细节。

建立Preferences对象
为了区分不同的应用程序的参数项,在建立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/sunway/spc");
Preferences sysData = Preferences.systemRoot().node("/com/sunway/spc");

以上每种方式提供了两套操作方法。其中一套是用户参数项,另一套是系统参数项。
在Windows平台中,用户参数项在注册表中的根节点是
HKEY_CURRENT_USER\Software\JavaSoft\Prefs
系统参数项在注册表中的根节点是
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs
而我们指定的节点路径是位于这些根节点之下的.

如何读写数据
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方法的第二个参数需要我们为它指定缺省的参数。
除了以上方式之外,Preferences还允许我们将它的数据导出到一个XML文件保存,
void exportNode(OutputStream os)
void exportSubtree(OutputStream os)
我们可以导出一个节点,或是导出整个子节点树.

 

不多说,直接贴出源代码(代码中有详细的注释):
package com.lixing.util;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.prefs.BackingStoreException;
import java.util.prefs.Preferences;

/**
* Preferences有两种保存文件的方式:
* 1. sysRoot 与系统有关的用户配置文件,此文件只要是系统用户都可以访问
* 2. userRoot 与用户有关的用户配置文件,只有该用户才可以访问
* 但两者的操作方法完全一样
*
* @author Administrator
*
*/

public class PreferencesTest {
private String[] keys = { "userName", "userPwd", "userEmail" };
private String[] values = { "Lixing", "123456", "hnlixing520@126.com" };

/**
* 设置Preferences的值
* @param userRoot
*/

private void setPreference(Preferences userRoot) {
for (int i = 0; i < keys.length; i++) {
userRoot.put(keys[i], values[i]);
}

}

/**
* 获得Preferences的指定值
* @param userRoot
*/

private void getPreference(Preferences userRoot){
System.out.println( "userName: " + userRoot.get("userName", "佚名") );
System.out.println( "userPwd: " + userRoot.get("userPwd", "0000") );
System.out.println( "userEmail: " + userRoot.get("userEmail", "xxx@126.com") );
}

/**
* 移除Preferences的首层包
* @param userRoot
*/

private void removeNode(Preferences userRoot){
try {
userRoot.removeNode();
} catch (BackingStoreException e) {
e.printStackTrace();
}
System.out.println( "removeNode success" );
}

/**
* 以树型结构导出为XML
* @param userRoot
*/

private void exportSubTree(Preferences userRoot) {
OutputStream os = null;
File file =new File("preferences.xml");
try {
os = new FileOutputStream( file );
userRoot.exportSubtree(os);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (BackingStoreException e) {
e.printStackTrace();
} finally {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println( "export tree success filename " + file.getName() );
}



public static void main(String[] args) {
PreferencesTest test = new PreferencesTest();

//以包的方式建立用户配置,目的就是防止冲突,便于管理
Preferences userRoot = Preferences.userNodeForPackage(PreferencesTest.class);
test.setPreference(userRoot);
test.exportSubTree(userRoot);
test.getPreference(userRoot);
test.removeNode(userRoot);
}
}
分享到:
评论

相关推荐

    JavaSE-6.0-英文手册(2008/11/30_FullUpdate)

    java.lang, java.util Packages Instrumentation Language and Utility Packages Monitoring and Management Package Version Identification Reference Objects Reflection Collections Framework ...

    使用java修改windows注册表.pdf

    Preferences sysPrefs = Preferences.systemRoot(); // 设置键值 sysPrefs.put("exampleKey", "exampleValue"); // 读取键值 String value = sysPrefs.get("exampleKey", "defaultValue"); System.out....

    java_1_4_2.

    - **preferences.gif**:这可能是一个GUI应用程序中的设置或首选项相关的图形资源,通常在Java应用程序中用于表示用户界面的某些选项或配置。 - **java.stx**:.stx文件通常是语法模板文件,可能包含Java语言的...

    java操作注册表

    通过使用 Preferences.systemRoot() 和 Preferences.userRoot() 方法,可以获取系统参数项和用户参数项的根节点。 在使用 Preferences 类时,需要注意以下几点: 1. 节点的首字母不要大写,不然在注册表中的项前就...

    Java利用Preferences设置个人偏好,转载自:燕窝

    Preferences API主要包括两个主要类:`java.util.prefs.Preferences.systemNodeForPackage()`和`java.util.prefs.Preferences.userNodeForPackage()`. `systemNodeForPackage()`返回的是系统级别的偏好设置,通常...

    使用java修改windows注册表.doc

    1. **创建Preference对象**:通过调用`Preferences.systemRoot()`或`Preferences.userRoot()`获取根节点。 2. **设置键值对**:使用`put(String key, String value)`等方法来设置注册表中的键值对。 3. **读取数据**...

    Java操作windows注册表

    例如,可以通过调用`Preferences.systemRoot().node("Software\\JavaSoft\\Prefs")`获取到`HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs`节点,然后使用`put`和`get`方法进行数据的存取。 但是,需要注意的是,`...

    java注册表读写

    节点可以是全局的也可以是用户的,分别通过`Preferences.systemRoot()`和`Preferences.userRoot()`方法获得。 2. **创建子节点**:可以通过调用`node()`方法创建子节点,这相当于在注册表中创建一个新的键。 3. **...

    java注册表修改

    2. **创建偏好设置对象**:`Preferences prefDemo = Preferences.userRoot().node("/com/sunway/spc");` 这一行代码创建了一个`Preferences`对象,用于指定用户级别的根节点,并进一步指定一个名为`/com/sunway/spc`...

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

    1. `Preferences.userRoot()` - 这个方法返回一个 `Preferences` 实例,代表当前用户首选项的根节点。在 Windows 上,它对应于 `HKEY_CURRENT_USER\Software\JavaSoft\Prefs`。 2. `Preferences.systemRoot()` - ...

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

    本文介绍了三种使用Java修改Windows注册表的方法:利用`java.util.prefs.Preferences`、使用“regedit /s”命令导入注册表文件以及使用第三方库GDAPI。每种方法都各有优势和局限性,开发者应根据实际需求选择最合适...

    java浏览器

    Java提供了多种持久化存储方案,如`java.util.prefs.Preferences`用于轻量级配置存储,或者使用数据库(如SQLite)进行更复杂的数据管理。 10. **调试和日志**: 开发过程中,调试和日志记录是非常重要的。Java提供...

    Android错误解决方法大集合

    一、 android java.net.UnknownHostException: Unable to resolve host"...": No address associated 错误 该错误是 Android 开发中常见的错误,主要是由于网络连接未开启或 Manifest 文件未标明网络访问权限所致。...

    修改注册表

    - 键的长度受限于`Preferences.MAX_KEY_LENGTH`(80个字符),而值的长度受限于`Preferences.MAX_VALUE_LENGTH`(8192个字符)。 - 在写入数据时,如果存储机制不可用,会抛出`BackingStoreException`异常。 #### ...

    java读取和保存property文件(可含中文)

    此外,还可以使用第三方库如Apache Commons Configuration或Java 8引入的`java.util.prefs.Preferences` API来提供更高级的配置管理功能,如支持XML配置、默认值、监听属性变化等。 总结,Java中的`java.util....

    实现自动登陆(java) 实现自动登陆(java)

    Java提供了多种本地存储选项,如`java.util.prefs.Preferences`系统,或者使用`java.io.File`或`java.nio.file`包来读写文件。 总的来说,实现Java自动登录功能需要理解HTTP协议、Cookie和Session机制,掌握网络...

    Java Preferences User Interface-开源

    Java Preferences User Interface(JPUI)是一个开源项目,专注于提供一个基于Java/Swing的图形用户界面,使得用户可以方便地浏览和编辑使用Java 1.4.x版本中的`java.util.prefs`包创建的Java首选项。Java首选项系统...

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

    这可以通过调用`Preferences.userRoot().node()`方法完成,传入一个标识符(通常是类名)作为节点名称。接着,你可以使用`get`和`set`方法来读写偏好。例如: - `prefs.getBoolean(key, defaultValue)`:获取指定键...

Global site tag (gtag.js) - Google Analytics