- 已知子类:
AbstractPreferences
有两种不同的偏好节点树,一种用于用户偏好,另一种用于系统偏好。每个用户都有一个单独的用户偏好树,给定系统中的所有用户共享同一系统偏好树。 “用户”和“系统”的准确描述会因实现而异。存储在用户首选项树中的典型信息可能包括字体选择、颜色选择或特定应用程序的首选窗口位置和大小。存储在系统首选项树中的典型信息可能包括应用程序的安装配置数据。
首选项树中的节点以类似于分层文件系统中的目录的方式命名。偏好树中的每个节点都有一个节点名称(不一定是唯一的),唯一的绝对路径名, 和一个路径名相对的对包括自己在内的每个祖先。
根节点的节点名称为空字符串 ("")。每个其他节点都有一个任意的节点名称,在创建时指定。对该名称的唯一限制是它不能为空字符串,并且不能包含斜杠字符 ('/')。
根节点的绝对路径名为 "/"。根节点的子节点的绝对路径名为 "/" + <node name>.所有其他节点的绝对路径名称为<父级的绝对路径名> + "/" + <node name>.请注意,所有绝对路径名都以斜杠字符开头。
一个节点n相对于其祖先的路径名a只是必须附加到的字符串a的绝对路径名,以便形成n的绝对路径名,删除了初始斜杠字符(如果存在)。注意:
- 没有相对路径名称以斜杠字符开头。
- 每个节点相对于自身的路径名都是空字符串。
- 每个节点相对于其父节点的路径名就是它的节点名(根节点除外,它没有父节点)。
- 每个节点相对于根的路径名是其绝对路径名,删除了初始斜杠字符。
最后要注意的是:
- 没有路径名包含多个连续的斜杠字符。
- 除了根的绝对路径名之外,没有任何路径名以斜杠字符结尾。
- 任何符合这两条规则的字符串都是有效的路径名。
所有修改首选项数据的方法都允许异步操作;它们可能会立即返回,并且更改最终会传播到持久性后备存储,并带有依赖于实现的延迟。 flush 方法可用于同步强制更新后备存储。 Java 虚拟机的正常终止将not导致挂起更新丢失——显式 flush 调用是not终止时需要,以确保挂起的更新持久化。
所有从 Preferences 对象读取首选项的方法都需要调用者提供默认值。如果之前没有设置值,则返回默认值或者如果后备存储不可用.目的是允许应用程序运行,尽管功能略有下降,即使后备存储变得不可用。一些方法,如 flush ,具有阻止它们在后备存储不可用时运行的语义。普通应用程序应该不需要调用这些方法中的任何一个,这可以通过它们被声明为抛出 BackingStoreException 的事实来识别。
此类中的方法可以由单个 JVM 中的多个线程并发调用,而无需外部同步,结果将等同于一些串行执行。如果同时使用这个类由多个 JVM将他们的偏好数据存储在同一个后备存储中,数据存储不会被破坏,但没有其他关于偏好数据一致性的保证。
此类包含导出/导入工具,允许将首选项“导出”到 XML 文档,并将表示首选项的 XML 文档“导入”回系统。此功能可用于备份全部或部分首选项树,并随后从备份中恢复。
XML 文档具有以下 DOCTYPE 声明:
<!DOCTYPE preferences SYSTEM "http://java.sun.com/dtd/preferences.dtd">
注意系统 URI (http://java.sun.com/dtd/preferences.dtd) 是not导出或导入首选项时访问;它仅用作唯一标识 DTD 的字符串,即:
<?xml version="1.0" encoding="UTF-8"?>
<!-- DTD for a Preferences tree. -->
<!-- The preferences element is at the root of an XML document
representing a Preferences tree. -->
<!ELEMENT preferences (root)>
<!-- The preferences element contains an optional version attribute,
which specifies version of DTD. -->
<!ATTLIST preferences EXTERNAL_XML_VERSION CDATA "0.0" >
<!-- The root element has a map representing the root's preferences
(if any), and one node for each child of the root (if any). -->
<!ELEMENT root (map, node*) >
<!-- Additionally, the root contains a type attribute, which
specifies whether it's the system or user root. -->
<!ATTLIST root
type (system|user) #REQUIRED >
<!-- Each node has a map representing its preferences (if any),
and one node for each child (if any). -->
<!ELEMENT node (map, node*) >
<!-- Additionally, each node has a name attribute -->
<!ATTLIST node
name CDATA #REQUIRED >
<!-- A map represents the preferences stored at a node (if any). -->
<!ELEMENT map (entry*) >
<!-- An entry represents a single preference, which is simply
a key-value pair. -->
<!ELEMENT entry EMPTY >
<!ATTLIST entry
key CDATA #REQUIRED
value CDATA #REQUIRED >
每个 Preferences 实现都必须具有关联的 PreferencesFactory 实现。每个 Java(TM) SE 实现都必须提供一些方法来指定使用哪个 PreferencesFactory 实现来生成根首选项节点。这允许管理员用替代实现替换默认首选项实现。
- 实现注意事项:
PreferencesFactory实现位于如下位置:如果定义了系统属性
java.util.prefs.PreferencesFactory,则它被视为实现PreferencesFactory接口的类的完全限定名称。该类已加载并实例化;如果此过程失败,则会抛出未指定的错误。如果
PreferencesFactory实现类文件已安装在system class loader可见的 jar 文件中,并且该 jar 文件在资源目录META-INF/services中包含名为java.util.prefs.PreferencesFactory的提供程序配置文件,则采用该文件中指定的第一个类名。如果提供了多个这样的 jar 文件,将使用找到的第一个。该类已加载并实例化;如果此过程失败,则会抛出未指定的错误。最后,如果既没有提供上述系统属性也没有提供扩展 jar 文件,则会加载并实例化底层平台的系统范围默认
PreferencesFactory实现。
- 自从:
- 1.4
-
字段摘要
字段修饰符和类型Field描述static final int允许作为键的字符串的最大长度(80 个字符)。static final int节点名称的最大长度(80 个字符)。static final int作为值允许的最大字符串长度(8192 个字符)。 -
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述abstract String返回此首选项节点的绝对路径名。abstract void注册指定的监听接收节点变化事件对于这个节点。abstract void注册指定的监听接收偏好改变事件对于这个偏好节点。abstract String[]返回此首选项节点的子节点的名称,相对于此节点。abstract voidclear()删除此首选项节点中的所有首选项(键值关联)。abstract void在指定的输出流上发出一个 XML 文档,表示该节点(但不包括其后代)中包含的所有首选项。abstract void发出一个 XML 文档,表示此节点及其所有后代中包含的所有首选项。abstract voidflush()强制将此首选项节点及其后代的内容更改到持久存储中。abstract String返回与此首选项节点中的指定键关联的值。abstract booleangetBoolean(String key, boolean def) 返回由与此首选项节点中的指定键关联的字符串表示的boolean。abstract byte[]getByteArray(String key, byte[] def) 返回由与此首选项节点中的指定键关联的字符串表示的字节数组值。abstract double返回由与此首选项节点中的指定键关联的字符串表示的双精度值。abstract float返回由与此首选项节点中的指定键关联的字符串表示的浮点值。abstract int返回由与此首选项节点中的指定键关联的字符串表示的 int 值。abstract long返回由与此首选项节点中的指定键关联的字符串表示的长值。static void在指定的输入流上导入 XML 文档表示的所有首选项。abstract boolean如果此首选项节点在用户首选项树中,则返回true;如果它在系统首选项树中,则返回false。abstract String[]keys()返回在此首选项节点中具有关联值的所有键。abstract Stringname()返回此首选项节点的名称,相对于其父节点。abstract Preferences返回与此节点位于同一树中的命名首选项节点,如果它们尚不存在,则创建它及其任何祖先。abstract booleannodeExists(String pathName) 如果命名的首选项节点与此节点存在于同一棵树中,则返回 true。abstract Preferencesparent()返回此偏好节点的父节点,如果这是根,则返回null。abstract void将指定值与此首选项节点中的指定键相关联。abstract voidputBoolean(String key, boolean value) 将表示指定boolean的字符串与此首选项节点中的指定键相关联。abstract voidputByteArray(String key, byte[] value) 将表示指定字节数组的字符串与此首选项节点中的指定键相关联。abstract void将表示指定双精度值的字符串与此首选项节点中的指定键相关联。abstract void将表示指定浮点值的字符串与此首选项节点中的指定键相关联。abstract void将表示指定 int 值的字符串与此首选项节点中的指定键相关联。abstract void将表示指定长值的字符串与此首选项节点中的指定键相关联。abstract void删除与此首选项节点中的指定键关联的值(如果有)。abstract void删除此首选项节点及其所有后代,使已删除节点中包含的任何首选项无效。abstract void删除指定的NodeChangeListener,因此它不再接收更改事件。abstract void删除指定的首选项更改监听,因此它不再接收首选项更改事件。abstract voidsync()确保未来从此首选项节点及其后代的读取反映了在sync调用之前提交给持久存储(来自任何 VM)的任何更改。static PreferencessystemNodeForPackage(Class<?> c) 从系统首选项树中返回首选项节点(按照惯例)与指定类的包相关联。static Preferences返回系统的根首选项节点。abstract StringtoString()返回此首选项节点的字符串表示形式,如同由表达式计算得出:(this.isUserNode() ? "User" : "System") + " Preference Node: " + this.absolutePath()。static PreferencesuserNodeForPackage(Class<?> c) 从与指定类的包相关联(按照惯例)的调用用户的首选项树中返回首选项节点。static PreferencesuserRoot()返回调用用户的根首选项节点。
-
字段详细信息
-
MAX_KEY_LENGTH
public static final int MAX_KEY_LENGTH允许作为键的字符串的最大长度(80 个字符)。- 参见:
-
MAX_VALUE_LENGTH
public static final int MAX_VALUE_LENGTH作为值允许的最大字符串长度(8192 个字符)。- 参见:
-
MAX_NAME_LENGTH
public static final int MAX_NAME_LENGTH节点名称的最大长度(80 个字符)。- 参见:
-
-
构造方法详细信息
-
Preferences
protected Preferences()唯一的构造方法。 (对于子类构造方法的调用,通常是隐式的。)
-
-
方法详情
-
userNodeForPackage
从与指定类的包相关联(按照惯例)的调用用户的首选项树中返回首选项节点。约定如下:节点的绝对路径名是完全限定的包名,前面有一个斜杠('/'),每个句点('.')由一个斜杠代替。例如,与类com.acme.widget.Foo关联的节点的绝对路径名称是/com/acme/widget。此约定不适用于未命名的包,其关联的首选项节点为
<unnamed>。这个节点不是为了长期使用,而是为了在不属于包的程序的早期开发和“一次性”程序中提供便利。有值的数据不应该存储在这个节点上,因为它被所有使用它的程序共享。类
Foo希望访问与其包有关的首选项可以获得一个首选项节点,如下所示:static Preferences prefs = Preferences.userNodeForPackage(Foo.class);
这个习惯用法避免了使用字符串来描述首选项节点的需要,并降低了运行时失败的可能性。 (如果类名拼写错误,通常会导致编译时错误。)调用此方法将导致创建返回的节点及其祖先(如果它们尚不存在)。如果返回的节点在此调用之前不存在,则在对返回的节点(或其祖先或后代之一)调用
flush方法之前,不能保证此节点和由此调用创建的任何祖先成为永久节点。- 参数:
c- 需要用户首选项节点的包的类。- 返回:
-
与
c所属的包关联的用户首选项节点。 - 抛出:
NullPointerException- 如果c是null。SecurityException- 如果存在安全管理器并且它拒绝RuntimePermission("preferences")。- 参见:
-
systemNodeForPackage
从系统首选项树中返回首选项节点(按照惯例)与指定类的包相关联。约定如下:节点的绝对路径名是完全限定的包名,前面有一个斜杠('/'),每个句点('.')由一个斜杠代替。例如,与类com.acme.widget.Foo关联的节点的绝对路径名称是/com/acme/widget。此约定不适用于未命名的包,其关联的首选项节点为
<unnamed>。这个节点不是为了长期使用,而是为了在不属于包的程序的早期开发和“一次性”程序中提供便利。有值的数据不应该存储在这个节点上,因为它被所有使用它的程序共享。类
Foo希望访问与其包有关的首选项可以获得一个首选项节点,如下所示:static Preferences prefs = Preferences.systemNodeForPackage(Foo.class);
这个习惯用法避免了使用字符串来描述首选项节点的需要,并降低了运行时失败的可能性。 (如果类名拼写错误,通常会导致编译时错误。)调用此方法将导致创建返回的节点及其祖先(如果它们尚不存在)。如果返回的节点在此调用之前不存在,则在对返回的节点(或其祖先或后代之一)调用
flush方法之前,不能保证此节点和由此调用创建的任何祖先成为永久节点。- 参数:
c- 其包需要系统首选项节点的类。- 返回:
-
与
c所属的包关联的系统首选项节点。 - 抛出:
NullPointerException- 如果c是null。SecurityException- 如果存在安全管理器并且它拒绝RuntimePermission("preferences")。- 参见:
-
userRoot
返回调用用户的根首选项节点。- 返回:
- 调用用户的根偏好节点。
- 抛出:
SecurityException- 如果安全管理器存在并且它拒绝RuntimePermission("preferences")。- 参见:
-
systemRoot
返回系统的根首选项节点。- 返回:
- 系统的根偏好节点。
- 抛出:
SecurityException- 如果安全管理器存在并且它拒绝RuntimePermission("preferences")。- 参见:
-
put
将指定值与此首选项节点中的指定键相关联。- 参数:
key- 与指定值关联的键。value- 与指定键关联的值。- 抛出:
NullPointerException- 如果键或值是null。IllegalArgumentException- 如果key.length()超过MAX_KEY_LENGTH或者如果value.length超过MAX_VALUE_LENGTH。IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。IllegalArgumentException- 如果键或值包含空控制字符,代码点 U+0000。
-
get
返回与此首选项节点中的指定键关联的值。如果没有与键关联的值,或者后备存储不可访问,则返回指定的默认值。某些实现可能会在其后备存储中存储默认值。如果没有与指定键关联的值,但有这样一个存储的默认值,它优先于指定的默认值返回。
- 参数:
key- 要返回其关联值的键。def- 如果此首选项节点没有与key关联的值,则返回该值。- 返回:
-
与
key关联的值,或者def如果没有值与key关联,或者后备存储不可访问。 - 抛出:
IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。NullPointerException- 如果key是null。 (def的null值是允许。)IllegalArgumentException- 如果键包含空控制字符,代码点 U+0000。
-
remove
删除与此首选项节点中的指定键关联的值(如果有)。如果这个实现支持存储的默认值并且指定首选项有这样一个默认值,存储的默认值将通过此调用“公开”,在某种意义上,它将通过对
get的后续调用返回。- 参数:
key- 要从首选项节点中删除其映射的键。- 抛出:
NullPointerException- 如果key是null。IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。IllegalArgumentException- 如果键包含空控制字符,代码点 U+0000。
-
clear
删除此首选项节点中的所有首选项(键值关联)。此调用对该节点的任何后代没有影响。如果这个实现支持存储的默认值,并且首选项层次结构中的此节点包含任何此类默认值,存储的默认值将通过此调用“公开”,在某种意义上它们将通过对
get的成功调用返回。- 抛出:
BackingStoreException- 如果由于后备存储故障或无法与其通信而无法完成此操作。IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。- 参见:
-
putInt
将表示指定 int 值的字符串与此首选项节点中的指定键相关联。关联的字符串是将 int 值传递给Integer.toString(int)时将返回的字符串。此方法旨在与getInt(java.lang.String, int)结合使用。- 参数:
key- 与字符串形式的值关联的键。value- 其字符串形式要与键相关联的值。- 抛出:
NullPointerException- 如果key是null。IllegalArgumentException- 如果key.length()超过MAX_KEY_LENGTH。IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。IllegalArgumentException- 如果键包含空控制字符,代码点 U+0000。- 参见:
-
getInt
返回由与此首选项节点中的指定键关联的字符串表示的 int 值。Integer.parseInt(String)将字符串转换为整数。如果没有与键关联的值,后备存储不可访问,或者如果传递了关联值,Integer.parseInt(String)将抛出NumberFormatException,则返回指定的默认值。此方法旨在与putInt(java.lang.String, int)结合使用。如果实现支持存储的默认值并且这样的默认值存在,可访问,并且可以使用
Integer.parseInt转换为 int,此 int 优先于指定的默认值返回。- 参数:
key- 其关联值将作为 int 返回的键。def- 如果此首选项节点没有与key关联的值或关联值不能解释为 int,或者后备存储不可访问,则返回值。- 返回:
-
此首选项节点中与
key关联的字符串表示的 int 值,如果关联值不存在或无法解释为 int,则为def。 - 抛出:
IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。NullPointerException- 如果key是null。IllegalArgumentException- 如果键包含空控制字符,代码点 U+0000。- 参见:
-
putLong
将表示指定长值的字符串与此首选项节点中的指定键相关联。关联的字符串是将长值传递给Long.toString(long)时将返回的字符串。此方法旨在与getLong(java.lang.String, long)结合使用。- 参数:
key- 与字符串形式的值关联的键。value- 其字符串形式要与键相关联的值。- 抛出:
NullPointerException- 如果key是null。IllegalArgumentException- 如果key.length()超过MAX_KEY_LENGTH。IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。IllegalArgumentException- 如果键包含空控制字符,代码点 U+0000。- 参见:
-
getLong
返回由与此首选项节点中的指定键关联的字符串表示的长值。该字符串由Long.parseLong(String)转换为 long as。如果没有与键关联的值,后备存储不可访问,或者如果传递了关联值,Long.parseLong(String)将抛出NumberFormatException,则返回指定的默认值。此方法旨在与putLong(java.lang.String, long)结合使用。如果实现支持存储的默认值并且这样的默认值存在,可访问,并且可以使用
Long.parseLong转换为 long,此 long 优先于指定的默认值返回。- 参数:
key- 其关联值将作为 long 返回的键。def- 如果此首选项节点没有与key关联的值或关联值不能解释为 long,或者后备存储不可访问,则返回值。- 返回:
-
此首选项节点中与
key关联的字符串表示的 long 值,如果关联值不存在或不能解释为 long,则为def。 - 抛出:
IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。NullPointerException- 如果key是null。IllegalArgumentException- 如果键包含空控制字符,代码点 U+0000。- 参见:
-
putBoolean
将表示指定boolean的字符串与此首选项节点中的指定键相关联。如果值为 true,则关联的字符串为"true",如果为 false,则为"false"。此方法旨在与getBoolean(java.lang.String, boolean)结合使用。- 参数:
key- 与字符串形式的值关联的键。value- 其字符串形式要与键相关联的值。- 抛出:
NullPointerException- 如果key是null。IllegalArgumentException- 如果key.length()超过MAX_KEY_LENGTH。IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。IllegalArgumentException- 如果键包含空控制字符,代码点 U+0000。- 参见:
-
getBoolean
返回由与此首选项节点中的指定键关联的字符串表示的boolean。有效的字符串是"true",代表 true,"false"代表 false。忽略大小写,因此,例如,"TRUE"和"False"也是有效的。此方法旨在与putBoolean(java.lang.String, boolean)结合使用。如果没有与键关联的值,后备存储不可访问,或者如果关联值不是
"true"或"false",忽略大小写,则返回指定的默认值。如果实现支持存储的默认值并且这样的默认值存在并且可以访问,它优先于指定的默认值使用,除非存储的默认值不是
"true"或"false",忽略大小写,在这种情况下使用指定的默认值。- 参数:
key- 其关联值将作为boolean返回的键。def- 如果此首选项节点没有与key关联的值或关联值不能解释为boolean,或者后备存储不可访问,则返回值。- 返回:
-
此首选项节点中与
key关联的字符串表示的boolean,如果关联值不存在或无法解释为boolean,则为def。 - 抛出:
IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。NullPointerException- 如果key是null。IllegalArgumentException- 如果键包含空控制字符,代码点 U+0000。- 参见:
-
putFloat
将表示指定浮点值的字符串与此首选项节点中的指定键相关联。如果将浮点值传递给Float.toString(float),则关联的字符串将返回。此方法旨在与getFloat(java.lang.String, float)结合使用。- 参数:
key- 与字符串形式的值关联的键。value- 其字符串形式要与键相关联的值。- 抛出:
NullPointerException- 如果key是null。IllegalArgumentException- 如果key.length()超过MAX_KEY_LENGTH。IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。IllegalArgumentException- 如果键包含空控制字符,代码点 U+0000。- 参见:
-
getFloat
返回由与此首选项节点中的指定键关联的字符串表示的浮点值。Float.parseFloat(String)将字符串转换为整数。如果没有与键关联的值,后备存储不可访问,或者如果传递了关联值,Float.parseFloat(String)将抛出NumberFormatException,则返回指定的默认值。此方法旨在与putFloat(java.lang.String, float)结合使用。如果实现支持存储的默认值并且这样的默认值存在,可访问,并且可以使用
Float.parseFloat转换为浮点数,此浮点数优先于指定的默认值返回。- 参数:
key- 其关联值将作为浮点数返回的键。def- 如果此首选项节点没有与key关联的值或关联值不能解释为浮点数,或者后备存储不可访问,则返回该值。- 返回:
-
此首选项节点中与
key关联的字符串表示的浮点值,如果关联值不存在或无法解释为浮点数,则为def。 - 抛出:
IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。NullPointerException- 如果key是null。IllegalArgumentException- 如果键包含空控制字符,代码点 U+0000。- 参见:
-
putDouble
将表示指定双精度值的字符串与此首选项节点中的指定键相关联。如果将双精度值传递给Double.toString(double),则关联的字符串将返回。此方法旨在与getDouble(java.lang.String, double)结合使用。- 参数:
key- 与字符串形式的值关联的键。value- 其字符串形式要与键相关联的值。- 抛出:
NullPointerException- 如果key是null。IllegalArgumentException- 如果key.length()超过MAX_KEY_LENGTH。IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。IllegalArgumentException- 如果键包含空控制字符,代码点 U+0000。- 参见:
-
getDouble
返回由与此首选项节点中的指定键关联的字符串表示的双精度值。Double.parseDouble(String)将字符串转换为整数。如果没有与键关联的值,后备存储不可访问,或者如果传递了关联值,Double.parseDouble(String)将抛出NumberFormatException,则返回指定的默认值。此方法旨在与putDouble(java.lang.String, double)结合使用。如果实现支持存储的默认值并且这样的默认值存在,可访问,并且可以使用
Double.parseDouble转换为双精度值,此双精度值优先于指定的默认值返回。- 参数:
key- 其关联值将作为双精度值返回的键。def- 如果此首选项节点没有与key关联的值或关联值不能解释为双精度值,或者后备存储不可访问,则返回该值。- 返回:
-
此首选项节点中与
key关联的字符串表示的双精度值,如果关联值不存在或不能解释为双精度值,则为def。 - 抛出:
IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。NullPointerException- 如果key是null。IllegalArgumentException- 如果键包含空控制字符,代码点 U+0000。- 参见:
-
putByteArray
将表示指定字节数组的字符串与此首选项节点中的指定键相关联。关联的字符串是Base64字节数组的编码,如 RFC 2045 ,第 6.8 节中所定义,有一个小的变化:字符串将仅由来自Base64字母表;它不会包含任何换行符。请注意,字节数组的最大长度限制为MAX_VALUE_LENGTH的四分之三,以便 Base64 编码的 String 的长度不会超过MAX_VALUE_LENGTH。此方法旨在与getByteArray(java.lang.String, byte[])结合使用。- 参数:
key- 与字符串形式的值关联的键。value- 其字符串形式要与键相关联的值。- 抛出:
NullPointerException- 如果键或值是null。IllegalArgumentException- 如果 key.length() 超过 MAX_KEY_LENGTH 或者如果 value.length 超过 MAX_VALUE_LENGTH*3/4。IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。IllegalArgumentException- 如果键包含空控制字符,代码点 U+0000。- 参见:
-
getByteArray
返回由与此首选项节点中的指定键关联的字符串表示的字节数组值。有效字符串是Base64编码的二进制数据,如 RFC 2045 中的定义,第 6.8 节,有一个小的变化:字符串必须仅包含来自Base64字母表;不允许换行符或无关字符。此方法旨在与putByteArray(java.lang.String, byte[])结合使用。如果没有与键关联的值,后备存储不可访问,或者关联值不是有效的 Base64 编码字节数组(如上定义),则返回指定的默认值。
如果实现支持存储的默认值并且这样的默认值存在并且可以访问,它优先于指定的默认值使用,除非存储的默认值不是有效的 Base64 编码字节数组(如上定义),在这种情况下使用指定的默认值。
- 参数:
key- 其关联值将作为字节数组返回的键。def- 如果此首选项节点没有与key关联的值或关联值不能解释为字节数组,或者后备存储不可访问,则返回值。- 返回:
-
由与此首选项节点中的
key关联的字符串表示的字节数组值,如果关联值不存在或无法解释为字节数组,则为def。 - 抛出:
IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。NullPointerException- 如果key是null。 (def的null值是允许。)IllegalArgumentException- 如果键包含空控制字符,代码点 U+0000。- 参见:
-
keys
返回在此首选项节点中具有关联值的所有键。 (如果此节点没有首选项,则返回的数组大小为零。)如果实现支持存储的默认值并且此节点上存在未被显式首选项重写的任何此类默认值,除了任何显式首选项之外,默认值也会在数组中返回。
- 返回:
- 在此首选项节点中具有关联值的键数组。
- 抛出:
BackingStoreException- 如果由于后备存储故障或无法与其通信而无法完成此操作。IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。
-
childrenNames
返回此首选项节点的子节点的名称,相对于此节点。 (如果此节点没有子节点,则返回的数组大小为零。)- 返回:
- 此首选项节点的子节点的名称。
- 抛出:
BackingStoreException- 如果由于后备存储故障或无法与其通信而无法完成此操作。IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。
-
parent
返回此偏好节点的父节点,如果这是根,则返回null。- 返回:
- 此首选项节点的父节点。
- 抛出:
IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。
-
node
返回与此节点位于同一树中的命名首选项节点,如果它们尚不存在,则创建它及其任何祖先。接受相对或绝对路径名。相对路径名称(不以斜杠字符('/')开头)相对于此首选项节点进行解释。如果返回的节点在此调用之前不存在,则在对返回的节点(或其祖先或后代之一)调用
flush方法之前,不能保证此节点和由此调用创建的任何祖先成为永久节点。- 参数:
pathName- 要返回的首选项节点的路径名。- 返回:
- 指定的首选项节点。
- 抛出:
IllegalArgumentException- 如果路径名无效(即它包含多个连续的斜杠字符,或以斜杠字符结尾且长度超过一个字符)。NullPointerException- 如果路径名为null。IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。- 参见:
-
nodeExists
如果命名的首选项节点与此节点存在于同一棵树中,则返回 true。相对路径名称(不以斜杠字符('/')开头)相对于此首选项节点进行解释。如果此节点(或祖先节点)已使用
removeNode()方法移除,则它是调用此方法是合法的,但只能使用路径名"";调用将返回false。因此,成语p.nodeExists("")可用于测试p是否已被删除。- 参数:
pathName- 要检查其存在的节点的路径名。- 返回:
- 如果指定的节点存在,则为真。
- 抛出:
BackingStoreException- 如果由于后备存储故障或无法与其通信而无法完成此操作。IllegalArgumentException- 如果路径名无效(即它包含多个连续的斜杠字符,或以斜杠字符结尾且长度超过一个字符)。NullPointerException- 如果路径名为null。IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除且pathName不是空字符串 ("")。
-
removeNode
删除此首选项节点及其所有后代,使已删除节点中包含的任何首选项无效。删除节点后,在对应的Preferences实例上尝试除name()、absolutePath()、isUserNode()、flush()或nodeExists("")之外的任何方法都将失败并返回IllegalStateException。 (在Object上定义的方法在节点被移除后仍然可以在节点上调用;它们不会抛出IllegalStateException。)除非在此节点(或祖先)上调用
flush方法,否则无法保证删除是持久的。如果这个实现支持存储的默认值, 删除节点会暴露该节点处或下方存储的所有默认值。因此,在此节点的路径名上对
nodeExists的后续调用可能会返回true,并且在此路径名上对node的后续调用可能会返回一个(不同的)Preferences实例,表示首选项和/或子项的非空集合。- 抛出:
BackingStoreException- 如果由于后备存储故障或无法与其通信而无法完成此操作。IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。UnsupportedOperationException- 如果在根节点上调用此方法。- 参见:
-
name
返回此首选项节点的名称,相对于其父节点。- 返回:
- 此首选项节点的名称,相对于其父节点。
-
absolutePath
返回此首选项节点的绝对路径名。- 返回:
- 此首选项节点的绝对路径名。
-
isUserNode
public abstract boolean isUserNode()如果此首选项节点在用户首选项树中,则返回true;如果它在系统首选项树中,则返回false。- 返回:
true如果此首选项节点在用户首选项树中,false如果它在系统首选项树中。
-
toString
返回此首选项节点的字符串表示形式,如同由表达式计算得出:(this.isUserNode() ? "User" : "System") + " Preference Node: " + this.absolutePath()。 -
flush
强制将此首选项节点及其后代的内容更改到持久存储中。一旦此方法成功返回,可以安全地假设在方法调用之前在以该节点为根的子树中所做的所有更改都已成为永久更改。实现可以随时将更改刷新到持久存储中。他们不需要等待这个方法被调用。
当在新创建的节点上发生刷新时,它会持久化,任何尚未持久化的祖先(和后代)也是如此。但是请注意,祖先的任何偏好值变化都是not保证持久化。
如果在已使用
removeNode()方法移除的节点上调用此方法,则会在该节点上调用 flushSpi(),但不会在其他节点上调用。- 抛出:
BackingStoreException- 如果由于后备存储故障或无法与其通信而无法完成此操作。- 参见:
-
sync
确保未来从此首选项节点及其后代的读取反映了在sync调用之前提交给持久存储(来自任何 VM)的任何更改。作为副作用,强制将此首选项节点及其后代的内容更改到持久存储,就好像已在此节点上调用了flush方法一样。- 抛出:
BackingStoreException- 如果由于后备存储故障或无法与其通信而无法完成此操作。IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。- 参见:
-
addPreferenceChangeListener
注册指定的监听接收偏好改变事件对于这个偏好节点。当偏好被添加到该节点、从该节点移除,或者当与偏好关联的值被更改时,会生成偏好更改事件。 (偏好变化事件是not由removeNode()方法生成,它生成一个节点变化事件.偏好更改事件是由clear方法生成。)只有在与注册的监听相同的 JVM 内所做的更改才能保证事件,尽管某些实现可能会为在该 JVM 之外所做的更改生成事件。事件可能会在更改持久化之前生成。在此节点的后代中修改首选项时不会生成事件;想要此类事件的调用者必须向每个后代注册。
- 参数:
pcl- 要添加的首选项更改监听器。- 抛出:
NullPointerException- 如果pcl为空。IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。- 参见:
-
removePreferenceChangeListener
删除指定的首选项更改监听,因此它不再接收首选项更改事件。- 参数:
pcl- 要删除的首选项更改监听器。- 抛出:
IllegalArgumentException- 如果pcl不是此节点上的已注册首选项更改监听器。IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。- 参见:
-
addNodeChangeListener
注册指定的监听接收节点变化事件对于这个节点。当向该节点添加或删除子节点时,会生成节点更改事件。 (单个removeNode()调用会导致多个节点变化事件,一个代表以删除的节点为根的子树中的每个节点。)只有在与注册的监听相同的 JVM 内所做的更改才能保证事件,尽管某些实现可能会为在该 JVM 之外所做的更改生成事件。在更改成为永久性更改之前可能会生成事件。添加或删除此节点的间接后代时不会生成事件;想要此类事件的调用者必须向每个后代注册。
关于节点创建几乎没有保证。因为节点是在访问时隐式创建的,所以实现在访问之前确定子节点是否存在于后备存储中可能是不可行的(例如,因为后备存储不可访问或缓存信息已过时)。在这些情况下,既不需要实现也不禁止生成节点更改事件。
- 参数:
ncl- 要添加的NodeChangeListener。- 抛出:
NullPointerException- 如果ncl为空。IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。- 参见:
-
removeNodeChangeListener
删除指定的NodeChangeListener,因此它不再接收更改事件。- 参数:
ncl- 要删除的NodeChangeListener。- 抛出:
IllegalArgumentException- 如果ncl不是该节点上的注册NodeChangeListener。IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。- 参见:
-
exportNode
在指定的输出流上发出一个 XML 文档,表示该节点(但不包括其后代)中包含的所有首选项。该 XML 文档实际上是节点的离线备份。XML 文档将具有以下 DOCTYPE 声明:
将使用 UTF-8 字符编码。<!DOCTYPE preferences SYSTEM "http://java.sun.com/dtd/preferences.dtd">此方法是一般规则的异常,即在此类中并发执行多个方法的结果会产生等同于某些串行执行的结果。如果在调用此方法的同时修改了此节点上的首选项,则导出的首选项包含节点中包含的首选项的“模糊快照”;一些并发修改可能会反映在导出的数据中,而另一些可能不会。
- 参数:
os- 在其上发出 XML 文档的输出流。- 抛出:
IOException- 如果写入指定的输出流导致IOException。BackingStoreException- 如果无法从后备存储中读取偏好数据。IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。- 参见:
-
exportSubtree
发出一个 XML 文档,表示此节点及其所有后代中包含的所有首选项。实际上,该 XML 文档是根植于该节点的子树的离线备份。XML 文档将具有以下 DOCTYPE 声明:
将使用 UTF-8 字符编码。<!DOCTYPE preferences SYSTEM "http://java.sun.com/dtd/preferences.dtd">此方法是一般规则的异常,即在此类中并发执行多个方法的结果会产生等同于某些串行执行的结果。如果以该节点为根的子树中的首选项或节点在调用此方法的同时被修改,则导出的首选项包括子树的“模糊快照”;一些并发修改可能会反映在导出的数据中,而另一些可能不会。
- 参数:
os- 在其上发出 XML 文档的输出流。- 抛出:
IOException- 如果写入指定的输出流导致IOException。BackingStoreException- 如果无法从后备存储中读取偏好数据。IllegalStateException- 如果此节点(或祖先节点)已使用removeNode()方法移除。- 参见:
-
importPreferences
public static void importPreferences(InputStream is) throws IOException , InvalidPreferencesFormatException 在指定的输入流上导入 XML 文档表示的所有首选项。该文档可以表示用户偏好或系统偏好。如果它表示用户首选项,首选项将被导入到调用用户的首选项树中(即使它们最初来自不同用户的首选项树)。如果文档描述的任何偏好位于不存在的偏好节点中,则将创建这些节点。XML 文档必须具有以下 DOCTYPE 声明:
(此方法旨在与<!DOCTYPE preferences SYSTEM "http://java.sun.com/dtd/preferences.dtd">exportNode(OutputStream)和exportSubtree(OutputStream)结合使用。此方法是一般规则的例外,即在此类中并发执行多个方法的结果会产生等同于某些串行执行的结果。该方法的行为就像是在此类中的其他公共方法之上实现的,特别是
node(String)和put(String, String)。- 参数:
is- 从中读取 XML 文档的输入流。- 抛出:
IOException- 如果从指定的输入流读取结果为IOException。InvalidPreferencesFormatException- 输入流中的数据不构成具有强制文档类型的有效 XML 文档。SecurityException- 如果安全管理器存在并且它拒绝RuntimePermission("preferences")。- 参见:
-