java.util.prefs.Preferences 类是在 JDK 1.4 中首次提供的,可以用它来存放应用程序的配置数据。
Preferences 的基本概念
很多软件的菜单里都有 “Setting” 或 “Preferences” 这样的选项用来设定或修改软件的配置,这些配置信息在不同的操作系统中是存放在不同的地方的,比如,Windows 操作系统中统一存储各个应用程序的配置信息的地方就是注册表,Windows 下的应用程序都可以将自己的配置信息存放到注册表中。
JDK 中的 Preferences 类也提供了一个让 Java 应用程序存放配置信息的统一方法,即每一个基于 Java 的应用程序都可以使用 Preferences 类存放自己的配置信息。
Preferences 类是平台无关的,也就是在 Windows 平台上运行的 Java 应用程序可以用 Preferences 类存放配置信息,在 Linux 平台上运行的 Java 应用程序也可以使用 Preferences 类来存放自己的配置信息,对应用程序来说,它只管用 Preferences 类就好了, 不用管最终的配置信息在程序运行平台上的具体存放位置。
Preferences 类将应用程序的配置信息存放在具体的操作系统平台上,具体来说,在 Windows 操作系统下存放在注册表中,在 Linux 平台下是放在使用应用程序的用户的 home 目录下面的一个隐藏文件中。
Preferences 类用树状结构来存放应用程序的配置信息,树中的每个节点的路径名是 /com/mycompany/myapp 这种形式的,每个节点上都存放了一个键值对组成的表。每个应用程序可以在属于自己的节点上存放自己的配置信息,这些配置信息就构成了一个表,这个表就是节点的内容。
Preferences 类有两个树,分别是系统树(它用来存放全部用户的共有信息)和用户树(它用来存放用户自己的配置信息)。在 Windows 操作系统下,系统树的根节点是 HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs
,而用户树的根节点是 HKEY_CURRENT_USER\software\JavaSoft\Prefs
。
Preferences 类的用法
为了用 Preferences 类来存放配置信息,必须先得到用户树或系统树的根节点,然后在根节点之下建立应用程序自己的子节点,在这个子节点上存放应用程序的配置信息。
Preferecens root = Preferences.userRoot(); // 获得用户树的根节点
或者
Preferences root = Preferences.systemRoot(); // 获得系统树的根节点
获得了用户树或系统树的根节点,就可以为自己的应用程序在根节点之下创建子节点了,用自己创建的子节点来存放自己的应用程序的配置信息。
Preferences node = root.node("/com/mycompany/myapp"); // 为应用程序在用户树(或者系统树)中建立一个节点或者获得一个已有的路径名为root/com/mycompany/myapp的节点
一旦获得了节点,就可以用如下各方法访问节点包含的键值表了。
String get(String key, String defVal)
int getInt(String key, int defVal)
Long getLong(String key, long defVal)
float getFloat(String key, float defVal)
double getDouble(String key, double defVal)
boolean getBoolean(String key, boolean defVal)
byte[] getByteArray(String key, byte[] defVal)
读取配置节点的键值对的时候,必须指定默认值,以防节点中的键没有值。
同时,也可以使用如下的各方法向节点中存放配置信息。
void put(String key, String value)
void putInt(String key, int value)
void putLong(String key, long value)
void putFloat(String key, float value)
void putDouble(String key, double value)
void putBoolean(String key, boolean value)
void putByteArray(String key, byte[] value)
用下面的方法可以在访问节点的键值对之前,获得全部的键:
String[] keys()
还可以用下面的方法把节点中某一个键值对移去不要了:
void remove(String key)
可以用下面的方法把一个节点全部移除不要:
void removeNode()
参考
https://blog.csdn.net/yxl_1207/article/details/81134823