模块 java.prefs

类 Preferences

java.lang.Object
java.util.prefs.Preferences
已知子类:
AbstractPreferences

public abstract class Preferences extends Object
偏好数据分层集合中的一个节点。此类允许应用程序存储和检索用户和系统首选项以及配置数据。此数据持久存储在依赖于实现的后备存储中。典型的实现包括平面文件、特定于操作系统的注册表、目录服务和 SQL 数据库。此类的用户无需关心后备存储的细节。

有两种不同的偏好节点树,一种用于用户偏好,另一种用于系统偏好。每个用户都有一个单独的用户偏好树,给定系统中的所有用户共享同一系统偏好树。 “用户”和“系统”的准确描述会因实现而异。存储在用户首选项树中的典型信息可能包括字体选择、颜色选择或特定应用程序的首选窗口位置和大小。存储在系统首选项树中的典型信息可能包括应用程序的安装配置数据。

首选项树中的节点以类似于分层文件系统中的目录的方式命名。偏好树中的每个节点都有一个节点名称(不一定是唯一的),唯一的绝对路径名, 和一个路径名相对的对包括自己在内的每个祖先。

根节点的节点名称为空字符串 ("")。每个其他节点都有一个任意的节点名称,在创建时指定。对该名称的唯一限制是它不能为空字符串,并且不能包含斜杠字符 ('/')。

根节点的绝对路径名为 "/"。根节点的子节点的绝对路径名为 "/" + <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 实现位于如下位置:
  1. 如果定义了系统属性 java.util.prefs.PreferencesFactory,则它被视为实现 PreferencesFactory 接口的类的完全限定名称。该类已加载并实例化;如果此过程失败,则会抛出未指定的错误。

  2. 如果 PreferencesFactory 实现类文件已安装在 system class loader 可见的 jar 文件中,并且该 jar 文件在资源目录 META-INF/services 中包含名为 java.util.prefs.PreferencesFactory 的提供程序配置文件,则采用该文件中指定的第一个类名。如果提供了多个这样的 jar 文件,将使用找到的第一个。该类已加载并实例化;如果此过程失败,则会抛出未指定的错误。

  3. 最后,如果既没有提供上述系统属性也没有提供扩展 jar 文件,则会加载并实例化底层平台的系统范围默认 PreferencesFactory 实现。

自从:
1.4
  • 字段摘要

    字段
    修饰符和类型
    Field
    描述
    static final int
    允许作为键的字符串的最大长度(80 个字符)。
    static final int
    节点名称的最大长度(80 个字符)。
    static final int
    作为值允许的最大字符串长度(8192 个字符)。
  • 构造方法总结

    构造方法
    修饰符
    构造方法
    描述
    protected
    唯一的构造方法。
  • 方法总结

    修饰符和类型
    方法
    描述
    abstract String
    返回此首选项节点的绝对路径名。
    abstract void
    注册指定的监听接收节点变化事件对于这个节点。
    abstract void
    注册指定的监听接收偏好改变事件对于这个偏好节点。
    abstract String[]
    返回此首选项节点的子节点的名称,相对于此节点。
    abstract void
    删除此首选项节点中的所有首选项(键值关联)。
    abstract void
    在指定的输出流上发出一个 XML 文档,表示该节点(但不包括其后代)中包含的所有首选项。
    abstract void
    发出一个 XML 文档,表示此节点及其所有后代中包含的所有首选项。
    abstract void
    强制将此首选项节点及其后代的内容更改到持久存储中。
    abstract String
    get(String key, String def)
    返回与此首选项节点中的指定键关联的值。
    abstract boolean
    getBoolean(String key, boolean def)
    返回由与此首选项节点中的指定键关联的字符串表示的boolean。
    abstract byte[]
    getByteArray(String key, byte[] def)
    返回由与此首选项节点中的指定键关联的字符串表示的字节数组值。
    abstract double
    getDouble(String key, double def)
    返回由与此首选项节点中的指定键关联的字符串表示的双精度值。
    abstract float
    getFloat(String key, float def)
    返回由与此首选项节点中的指定键关联的字符串表示的浮点值。
    abstract int
    getInt(String key, int def)
    返回由与此首选项节点中的指定键关联的字符串表示的 int 值。
    abstract long
    getLong(String key, long def)
    返回由与此首选项节点中的指定键关联的字符串表示的长值。
    static void
    在指定的输入流上导入 XML 文档表示的所有首选项。
    abstract boolean
    如果此首选项节点在用户首选项树中,则返回 true;如果它在系统首选项树中,则返回 false
    abstract String[]
    keys()
    返回在此首选项节点中具有关联值的所有键。
    abstract String
    name()
    返回此首选项节点的名称,相对于其父节点。
    abstract Preferences
    node(String pathName)
    返回与此节点位于同一树中的命名首选项节点,如果它们尚不存在,则创建它及其任何祖先。
    abstract boolean
    nodeExists(String pathName)
    如果命名的首选项节点与此节点存在于同一棵树中,则返回 true。
    abstract Preferences
    返回此偏好节点的父节点,如果这是根,则返回 null
    abstract void
    put(String key, String value)
    将指定值与此首选项节点中的指定键相关联。
    abstract void
    putBoolean(String key, boolean value)
    将表示指定boolean的字符串与此首选项节点中的指定键相关联。
    abstract void
    putByteArray(String key, byte[] value)
    将表示指定字节数组的字符串与此首选项节点中的指定键相关联。
    abstract void
    putDouble(String key, double value)
    将表示指定双精度值的字符串与此首选项节点中的指定键相关联。
    abstract void
    putFloat(String key, float value)
    将表示指定浮点值的字符串与此首选项节点中的指定键相关联。
    abstract void
    putInt(String key, int value)
    将表示指定 int 值的字符串与此首选项节点中的指定键相关联。
    abstract void
    putLong(String key, long value)
    将表示指定长值的字符串与此首选项节点中的指定键相关联。
    abstract void
    remove(String key)
    删除与此首选项节点中的指定键关联的值(如果有)。
    abstract void
    删除此首选项节点及其所有后代,使已删除节点中包含的任何首选项无效。
    abstract void
    删除指定的 NodeChangeListener ,因此它不再接收更改事件。
    abstract void
    删除指定的首选项更改监听,因此它不再接收首选项更改事件。
    abstract void
    sync()
    确保未来从此首选项节点及其后代的读取反映了在 sync 调用之前提交给持久存储(来自任何 VM)的任何更改。
    static Preferences
    从系统首选项树中返回首选项节点(按照惯例)与指定类的包相关联。
    static Preferences
    返回系统的根首选项节点。
    abstract String
    返回此首选项节点的字符串表示形式,如同由表达式计算得出:(this.isUserNode() ? "User" : "System") + " Preference Node: " + this.absolutePath()
    static Preferences
    从与指定类的包相关联(按照惯例)的调用用户的首选项树中返回首选项节点。
    static Preferences
    返回调用用户的根首选项节点。

    在类 java.lang.Object 中声明的方法

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • 字段详细信息

    • 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

      public static Preferences  userNodeForPackage(Class <?> c)
      从与指定类的包相关联(按照惯例)的调用用户的首选项树中返回首选项节点。约定如下:节点的绝对路径名是完全限定的包名,前面有一个斜杠('/'),每个句点('.')由一个斜杠代替。例如,与类 com.acme.widget.Foo 关联的节点的绝对路径名称是 /com/acme/widget

      此约定不适用于未命名的包,其关联的首选项节点为 <unnamed> 。这个节点不是为了长期使用,而是为了在不属于包的程序的早期开发和“一次性”程序中提供便利。有值的数据不应该存储在这个节点上,因为它被所有使用它的程序共享。

      Foo希望访问与其包有关的首选项可以获得一个首选项节点,如下所示:

        static Preferences prefs = Preferences.userNodeForPackage(Foo.class);
       
      这个习惯用法避免了使用字符串来描述首选项节点的需要,并降低了运行时失败的可能性。 (如果类名拼写错误,通常会导致编译时错误。)

      调用此方法将导致创建返回的节点及其祖先(如果它们尚不存在)。如果返回的节点在此调用之前不存在,则在对返回的节点(或其祖先或后代之一)调用 flush 方法之前,不能保证此节点和由此调用创建的任何祖先成为永久节点。

      参数:
      c - 需要用户首选项节点的包的类。
      返回:
      c 所属的包关联的用户首选项节点。
      抛出:
      NullPointerException - 如果 cnull
      SecurityException - 如果存在安全管理器并且它拒绝 RuntimePermission("preferences")
      参见:
    • systemNodeForPackage

      public static Preferences  systemNodeForPackage(Class <?> c)
      从系统首选项树中返回首选项节点(按照惯例)与指定类的包相关联。约定如下:节点的绝对路径名是完全限定的包名,前面有一个斜杠('/'),每个句点('.')由一个斜杠代替。例如,与类 com.acme.widget.Foo 关联的节点的绝对路径名称是 /com/acme/widget

      此约定不适用于未命名的包,其关联的首选项节点为 <unnamed> 。这个节点不是为了长期使用,而是为了在不属于包的程序的早期开发和“一次性”程序中提供便利。有值的数据不应该存储在这个节点上,因为它被所有使用它的程序共享。

      Foo希望访问与其包有关的首选项可以获得一个首选项节点,如下所示:

       static Preferences prefs = Preferences.systemNodeForPackage(Foo.class);
       
      这个习惯用法避免了使用字符串来描述首选项节点的需要,并降低了运行时失败的可能性。 (如果类名拼写错误,通常会导致编译时错误。)

      调用此方法将导致创建返回的节点及其祖先(如果它们尚不存在)。如果返回的节点在此调用之前不存在,则在对返回的节点(或其祖先或后代之一)调用 flush 方法之前,不能保证此节点和由此调用创建的任何祖先成为永久节点。

      参数:
      c - 其包需要系统首选项节点的类。
      返回:
      c 所属的包关联的系统首选项节点。
      抛出:
      NullPointerException - 如果 cnull
      SecurityException - 如果存在安全管理器并且它拒绝 RuntimePermission("preferences")
      参见:
    • userRoot

      public static Preferences  userRoot()
      返回调用用户的根首选项节点。
      返回:
      调用用户的根偏好节点。
      抛出:
      SecurityException - 如果安全管理器存在并且它拒绝 RuntimePermission("preferences")
      参见:
    • systemRoot

      public static Preferences  systemRoot()
      返回系统的根首选项节点。
      返回:
      系统的根偏好节点。
      抛出:
      SecurityException - 如果安全管理器存在并且它拒绝 RuntimePermission("preferences")
      参见:
    • put

      public abstract void put(String  key, String  value)
      将指定值与此首选项节点中的指定键相关联。
      参数:
      key - 与指定值关联的键。
      value - 与指定键关联的值。
      抛出:
      NullPointerException - 如果键或值是 null
      IllegalArgumentException - 如果 key.length() 超过 MAX_KEY_LENGTH 或者如果 value.length 超过 MAX_VALUE_LENGTH
      IllegalStateException - 如果此节点(或祖先节点)已使用 removeNode() 方法移除。
      IllegalArgumentException - 如果键或值包含空控制字符,代码点 U+0000。
    • get

      public abstract String  get(String  key, String  def)
      返回与此首选项节点中的指定键关联的值。如果没有与键关联的值,或者后备存储不可访问,则返回指定的默认值。

      某些实现可能会在其后备存储中存储默认值。如果没有与指定键关联的值,但有这样一个存储的默认值,它优先于指定的默认值返回。

      参数:
      key - 要返回其关联值的键。
      def - 如果此首选项节点没有与 key 关联的值,则返回该值。
      返回:
      key 关联的值,或者 def 如果没有值与 key 关联,或者后备存储不可访问。
      抛出:
      IllegalStateException - 如果此节点(或祖先节点)已使用 removeNode() 方法移除。
      NullPointerException - 如果 keynull。 (defnull允许。)
      IllegalArgumentException - 如果键包含空控制字符,代码点 U+0000。
    • remove

      public abstract void remove(String  key)
      删除与此首选项节点中的指定键关联的值(如果有)。

      如果这个实现支持存储的默认值并且指定首选项有这样一个默认值,存储的默认值将通过此调用“公开”,在某种意义上,它将通过对 get 的后续调用返回。

      参数:
      key - 要从首选项节点中删除其映射的键。
      抛出:
      NullPointerException - 如果 keynull
      IllegalStateException - 如果此节点(或祖先节点)已使用 removeNode() 方法移除。
      IllegalArgumentException - 如果键包含空控制字符,代码点 U+0000。
    • clear

      public abstract void clear() throws BackingStoreException
      删除此首选项节点中的所有首选项(键值关联)。此调用对该节点的任何后代没有影响。

      如果这个实现支持存储的默认值,并且首选项层次结构中的此节点包含任何此类默认值,存储的默认值将通过此调用“公开”,在某种意义上它们将通过对 get 的成功调用返回。

      抛出:
      BackingStoreException - 如果由于后备存储故障或无法与其通信而无法完成此操作。
      IllegalStateException - 如果此节点(或祖先节点)已使用 removeNode() 方法移除。
      参见:
    • putInt

      public abstract void putInt(String  key, int value)
      将表示指定 int 值的字符串与此首选项节点中的指定键相关联。关联的字符串是将 int 值传递给 Integer.toString(int) 时将返回的字符串。此方法旨在与 getInt(java.lang.String, int) 结合使用。
      参数:
      key - 与字符串形式的值关联的键。
      value - 其字符串形式要与键相关联的值。
      抛出:
      NullPointerException - 如果 keynull
      IllegalArgumentException - 如果 key.length() 超过 MAX_KEY_LENGTH
      IllegalStateException - 如果此节点(或祖先节点)已使用 removeNode() 方法移除。
      IllegalArgumentException - 如果键包含空控制字符,代码点 U+0000。
      参见:
    • getInt

      public abstract int getInt(String  key, int def)
      返回由与此首选项节点中的指定键关联的字符串表示的 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 - 如果 keynull
      IllegalArgumentException - 如果键包含空控制字符,代码点 U+0000。
      参见:
    • putLong

      public abstract void putLong(String  key, long value)
      将表示指定长值的字符串与此首选项节点中的指定键相关联。关联的字符串是将长值传递给 Long.toString(long) 时将返回的字符串。此方法旨在与 getLong(java.lang.String, long) 结合使用。
      参数:
      key - 与字符串形式的值关联的键。
      value - 其字符串形式要与键相关联的值。
      抛出:
      NullPointerException - 如果 keynull
      IllegalArgumentException - 如果 key.length() 超过 MAX_KEY_LENGTH
      IllegalStateException - 如果此节点(或祖先节点)已使用 removeNode() 方法移除。
      IllegalArgumentException - 如果键包含空控制字符,代码点 U+0000。
      参见:
    • getLong

      public abstract long getLong(String  key, long def)
      返回由与此首选项节点中的指定键关联的字符串表示的长值。该字符串由 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 - 如果 keynull
      IllegalArgumentException - 如果键包含空控制字符,代码点 U+0000。
      参见:
    • putBoolean

      public abstract void putBoolean(String  key, boolean value)
      将表示指定boolean的字符串与此首选项节点中的指定键相关联。如果值为 true,则关联的字符串为 "true",如果为 false,则为 "false"。此方法旨在与 getBoolean(java.lang.String, boolean) 结合使用。
      参数:
      key - 与字符串形式的值关联的键。
      value - 其字符串形式要与键相关联的值。
      抛出:
      NullPointerException - 如果 keynull
      IllegalArgumentException - 如果 key.length() 超过 MAX_KEY_LENGTH
      IllegalStateException - 如果此节点(或祖先节点)已使用 removeNode() 方法移除。
      IllegalArgumentException - 如果键包含空控制字符,代码点 U+0000。
      参见:
    • getBoolean

      public abstract boolean getBoolean(String  key, boolean def)
      返回由与此首选项节点中的指定键关联的字符串表示的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 - 如果 keynull
      IllegalArgumentException - 如果键包含空控制字符,代码点 U+0000。
      参见:
    • putFloat

      public abstract void putFloat(String  key, float value)
      将表示指定浮点值的字符串与此首选项节点中的指定键相关联。如果将浮点值传递给 Float.toString(float) ,则关联的字符串将返回。此方法旨在与 getFloat(java.lang.String, float) 结合使用。
      参数:
      key - 与字符串形式的值关联的键。
      value - 其字符串形式要与键相关联的值。
      抛出:
      NullPointerException - 如果 keynull
      IllegalArgumentException - 如果 key.length() 超过 MAX_KEY_LENGTH
      IllegalStateException - 如果此节点(或祖先节点)已使用 removeNode() 方法移除。
      IllegalArgumentException - 如果键包含空控制字符,代码点 U+0000。
      参见:
    • getFloat

      public abstract float getFloat(String  key, float def)
      返回由与此首选项节点中的指定键关联的字符串表示的浮点值。 Float.parseFloat(String) 将字符串转换为整数。如果没有与键关联的值,后备存储不可访问,或者如果传递了关联值,Float.parseFloat(String) 将抛出 NumberFormatException ,则返回指定的默认值。此方法旨在与 putFloat(java.lang.String, float) 结合使用。

      如果实现支持存储的默认值并且这样的默认值存在,可访问,并且可以使用 Float.parseFloat 转换为浮点数,此浮点数优先于指定的默认值返回。

      参数:
      key - 其关联值将作为浮点数返回的键。
      def - 如果此首选项节点没有与 key 关联的值或关联值不能解释为浮点数,或者后备存储不可访问,则返回该值。
      返回:
      此首选项节点中与 key 关联的字符串表示的浮点值,如果关联值不存在或无法解释为浮点数,则为 def
      抛出:
      IllegalStateException - 如果此节点(或祖先节点)已使用 removeNode() 方法移除。
      NullPointerException - 如果 keynull
      IllegalArgumentException - 如果键包含空控制字符,代码点 U+0000。
      参见:
    • putDouble

      public abstract void putDouble(String  key, double value)
      将表示指定双精度值的字符串与此首选项节点中的指定键相关联。如果将双精度值传递给 Double.toString(double) ,则关联的字符串将返回。此方法旨在与 getDouble(java.lang.String, double) 结合使用。
      参数:
      key - 与字符串形式的值关联的键。
      value - 其字符串形式要与键相关联的值。
      抛出:
      NullPointerException - 如果 keynull
      IllegalArgumentException - 如果 key.length() 超过 MAX_KEY_LENGTH
      IllegalStateException - 如果此节点(或祖先节点)已使用 removeNode() 方法移除。
      IllegalArgumentException - 如果键包含空控制字符,代码点 U+0000。
      参见:
    • getDouble

      public abstract double getDouble(String  key, double def)
      返回由与此首选项节点中的指定键关联的字符串表示的双精度值。 Double.parseDouble(String) 将字符串转换为整数。如果没有与键关联的值,后备存储不可访问,或者如果传递了关联值,Double.parseDouble(String) 将抛出 NumberFormatException ,则返回指定的默认值。此方法旨在与 putDouble(java.lang.String, double) 结合使用。

      如果实现支持存储的默认值并且这样的默认值存在,可访问,并且可以使用 Double.parseDouble 转换为双精度值,此双精度值优先于指定的默认值返回。

      参数:
      key - 其关联值将作为双精度值返回的键。
      def - 如果此首选项节点没有与 key 关联的值或关联值不能解释为双精度值,或者后备存储不可访问,则返回该值。
      返回:
      此首选项节点中与 key 关联的字符串表示的双精度值,如果关联值不存在或不能解释为双精度值,则为 def
      抛出:
      IllegalStateException - 如果此节点(或祖先节点)已使用 removeNode() 方法移除。
      NullPointerException - 如果 keynull
      IllegalArgumentException - 如果键包含空控制字符,代码点 U+0000。
      参见:
    • putByteArray

      public abstract void putByteArray(String  key, byte[] value)
      将表示指定字节数组的字符串与此首选项节点中的指定键相关联。关联的字符串是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

      public abstract byte[] getByteArray(String  key, byte[] def)
      返回由与此首选项节点中的指定键关联的字符串表示的字节数组值。有效字符串是Base64编码的二进制数据,如 RFC 2045 中的定义,第 6.8 节,有一个小的变化:字符串必须仅包含来自Base64字母表;不允许换行符或无关字符。此方法旨在与 putByteArray(java.lang.String, byte[]) 结合使用。

      如果没有与键关联的值,后备存储不可访问,或者关联值不是有效的 Base64 编码字节数组(如上定义),则返回指定的默认值。

      如果实现支持存储的默认值并且这样的默认值存在并且可以访问,它优先于指定的默认值使用,除非存储的默认值不是有效的 Base64 编码字节数组(如上定义),在这种情况下使用指定的默认值。

      参数:
      key - 其关联值将作为字节数组返回的键。
      def - 如果此首选项节点没有与 key 关联的值或关联值不能解释为字节数组,或者后备存储不可访问,则返回值。
      返回:
      由与此首选项节点中的 key 关联的字符串表示的字节数组值,如果关联值不存在或无法解释为字节数组,则为 def
      抛出:
      IllegalStateException - 如果此节点(或祖先节点)已使用 removeNode() 方法移除。
      NullPointerException - 如果 keynull。 (defnull允许。)
      IllegalArgumentException - 如果键包含空控制字符,代码点 U+0000。
      参见:
    • keys

      public abstract String [] keys() throws BackingStoreException
      返回在此首选项节点中具有关联值的所有键。 (如果此节点没有首选项,则返回的数组大小为零。)

      如果实现支持存储的默认值并且此节点上存在未被显式首选项重写的任何此类默认值,除了任何显式首选项之外,默认值也会在数组中返回。

      返回:
      在此首选项节点中具有关联值的键数组。
      抛出:
      BackingStoreException - 如果由于后备存储故障或无法与其通信而无法完成此操作。
      IllegalStateException - 如果此节点(或祖先节点)已使用 removeNode() 方法移除。
    • childrenNames

      public abstract String [] childrenNames() throws BackingStoreException
      返回此首选项节点的子节点的名称,相对于此节点。 (如果此节点没有子节点,则返回的数组大小为零。)
      返回:
      此首选项节点的子节点的名称。
      抛出:
      BackingStoreException - 如果由于后备存储故障或无法与其通信而无法完成此操作。
      IllegalStateException - 如果此节点(或祖先节点)已使用 removeNode() 方法移除。
    • parent

      public abstract Preferences  parent()
      返回此偏好节点的父节点,如果这是根,则返回 null
      返回:
      此首选项节点的父节点。
      抛出:
      IllegalStateException - 如果此节点(或祖先节点)已使用 removeNode() 方法移除。
    • node

      public abstract Preferences  node(String  pathName)
      返回与此节点位于同一树中的命名首选项节点,如果它们尚不存在,则创建它及其任何祖先。接受相对或绝对路径名。相对路径名称(不以斜杠字符 ('/') 开头)相对于此首选项节点进行解释。

      如果返回的节点在此调用之前不存在,则在对返回的节点(或其祖先或后代之一)调用 flush 方法之前,不能保证此节点和由此调用创建的任何祖先成为永久节点。

      参数:
      pathName - 要返回的首选项节点的路径名。
      返回:
      指定的首选项节点。
      抛出:
      IllegalArgumentException - 如果路径名无效(即它包含多个连续的斜杠字符,或以斜杠字符结尾且长度超过一个字符)。
      NullPointerException - 如果路径名为 null
      IllegalStateException - 如果此节点(或祖先节点)已使用 removeNode() 方法移除。
      参见:
    • nodeExists

      public abstract boolean nodeExists(String  pathName) throws BackingStoreException
      如果命名的首选项节点与此节点存在于同一棵树中,则返回 true。相对路径名称(不以斜杠字符 ('/') 开头)相对于此首选项节点进行解释。

      如果此节点(或祖先节点)已使用 removeNode() 方法移除,则它调用此方法是合法的,但只能使用路径名 "" ;调用将返回 false 。因此,成语 p.nodeExists("") 可用于测试 p 是否已被删除。

      参数:
      pathName - 要检查其存在的节点的路径名。
      返回:
      如果指定的节点存在,则为真。
      抛出:
      BackingStoreException - 如果由于后备存储故障或无法与其通信而无法完成此操作。
      IllegalArgumentException - 如果路径名无效(即它包含多个连续的斜杠字符,或以斜杠字符结尾且长度超过一个字符)。
      NullPointerException - 如果路径名为 null
      IllegalStateException - 如果此节点(或祖先节点)已使用 removeNode() 方法移除且 pathName 不是空字符串 ("" )。
    • removeNode

      public abstract void removeNode() throws BackingStoreException
      删除此首选项节点及其所有后代,使已删除节点中包含的任何首选项无效。删除节点后,在对应的 Preferences 实例上尝试除 name() absolutePath() isUserNode() flush() nodeExists("") 之外的任何方法都将失败并返回 IllegalStateException。 (在 Object 上定义的方法在节点被移除后仍然可以在节点上调用;它们不会抛出 IllegalStateException 。)

      除非在此节点(或祖先)上调用 flush 方法,否则无法保证删除是持久的。

      如果这个实现支持存储的默认值, 删除节点会暴露该节点处或下方存储的所有默认值。因此,在此节点的路径名上对 nodeExists 的后续调用可能会返回 true ,并且在此路径名上对 node 的后续调用可能会返回一个(不同的)Preferences 实例,表示首选项和/或子项的非空集合。

      抛出:
      BackingStoreException - 如果由于后备存储故障或无法与其通信而无法完成此操作。
      IllegalStateException - 如果此节点(或祖先节点)已使用 removeNode() 方法移除。
      UnsupportedOperationException - 如果在根节点上调用此方法。
      参见:
    • name

      public abstract String  name()
      返回此首选项节点的名称,相对于其父节点。
      返回:
      此首选项节点的名称,相对于其父节点。
    • absolutePath

      public abstract String  absolutePath()
      返回此首选项节点的绝对路径名。
      返回:
      此首选项节点的绝对路径名。
    • isUserNode

      public abstract boolean isUserNode()
      如果此首选项节点在用户首选项树中,则返回 true;如果它在系统首选项树中,则返回 false
      返回:
      true 如果此首选项节点在用户首选项树中,false 如果它在系统首选项树中。
    • toString

      public abstract String  toString()
      返回此首选项节点的字符串表示形式,如同由表达式计算得出:(this.isUserNode() ? "User" : "System") + " Preference Node: " + this.absolutePath()
      重写:
      toString 在类 Object
      返回:
      对象的字符串表示形式。
    • flush

      public abstract void flush() throws BackingStoreException
      强制将此首选项节点及其后代的内容更改到持久存储中。一旦此方法成功返回,可以安全地假设在方法调用之前在以该节点为根的子树中所做的所有更改都已成为永久更改。

      实现可以随时将更改刷新到持久存储中。他们不需要等待这个方法被调用。

      当在新创建的节点上发生刷新时,它会持久化,任何尚未持久化的祖先(和后代)也是如此。但是请注意,祖先的任何偏好值变化都是not保证持久化。

      如果在已使用 removeNode() 方法移除的节点上调用此方法,则会在该节点上调用 flushSpi(),但不会在其他节点上调用。

      抛出:
      BackingStoreException - 如果由于后备存储故障或无法与其通信而无法完成此操作。
      参见:
    • sync

      public abstract void sync() throws BackingStoreException
      确保未来从此首选项节点及其后代的读取反映了在 sync 调用之前提交给持久存储(来自任何 VM)的任何更改。作为副作用,强制将此首选项节点及其后代的内容更改到持久存储,就好像已在此节点上调用了 flush 方法一样。
      抛出:
      BackingStoreException - 如果由于后备存储故障或无法与其通信而无法完成此操作。
      IllegalStateException - 如果此节点(或祖先节点)已使用 removeNode() 方法移除。
      参见:
    • addPreferenceChangeListener

      public abstract void addPreferenceChangeListener(PreferenceChangeListener  pcl)
      注册指定的监听接收偏好改变事件对于这个偏好节点。当偏好被添加到该节点、从该节点移除,或者当与偏好关联的值被更改时,会生成偏好更改事件。 (偏好变化事件是notremoveNode() 方法生成,它生成一个节点变化事件.偏好更改事件clear 方法生成。)

      只有在与注册的监听相同的 JVM 内所做的更改才能保证事件,尽管某些实现可能会为在该 JVM 之外所做的更改生成事件。事件可能会在更改持久化之前生成。在此节点的后代中修改首选项时不会生成事件;想要此类事件的调用者必须向每个后代注册。

      参数:
      pcl - 要添加的首选项更改监听器。
      抛出:
      NullPointerException - 如果 pcl 为空。
      IllegalStateException - 如果此节点(或祖先节点)已使用 removeNode() 方法移除。
      参见:
    • removePreferenceChangeListener

      public abstract void removePreferenceChangeListener(PreferenceChangeListener  pcl)
      删除指定的首选项更改监听,因此它不再接收首选项更改事件。
      参数:
      pcl - 要删除的首选项更改监听器。
      抛出:
      IllegalArgumentException - 如果 pcl 不是此节点上的已注册首选项更改监听器。
      IllegalStateException - 如果此节点(或祖先节点)已使用 removeNode() 方法移除。
      参见:
    • addNodeChangeListener

      public abstract void addNodeChangeListener(NodeChangeListener  ncl)
      注册指定的监听接收节点变化事件对于这个节点。当向该节点添加或删除子节点时,会生成节点更改事件。 (单个 removeNode() 调用会导致多个节点变化事件,一个代表以删除的节点为根的子树中的每个节点。)

      只有在与注册的监听相同的 JVM 内所做的更改才能保证事件,尽管某些实现可能会为在该 JVM 之外所做的更改生成事件。在更改成为永久性更改之前可能会生成事件。添加或删除此节点的间接后代时不会生成事件;想要此类事件的调用者必须向每个后代注册。

      关于节点创建几乎没有保证。因为节点是在访问时隐式创建的,所以实现在访问之前确定子节点是否存在于后备存储中可能是不可行的(例如,因为后备存储不可访问或缓存信息已过时)。在这些情况下,既不需要实现也不禁止生成节点更改事件。

      参数:
      ncl - 要添加的 NodeChangeListener
      抛出:
      NullPointerException - 如果 ncl 为空。
      IllegalStateException - 如果此节点(或祖先节点)已使用 removeNode() 方法移除。
      参见:
    • removeNodeChangeListener

      public abstract void removeNodeChangeListener(NodeChangeListener  ncl)
      删除指定的 NodeChangeListener ,因此它不再接收更改事件。
      参数:
      ncl - 要删除的 NodeChangeListener
      抛出:
      IllegalArgumentException - 如果 ncl 不是该节点上的注册 NodeChangeListener
      IllegalStateException - 如果此节点(或祖先节点)已使用 removeNode() 方法移除。
      参见:
    • exportNode

      public abstract void exportNode(OutputStream  os) throws IOException , BackingStoreException
      在指定的输出流上发出一个 XML 文档,表示该节点(但不包括其后代)中包含的所有首选项。该 XML 文档实际上是节点的离线备份。

      XML 文档将具有以下 DOCTYPE 声明:

      
       <!DOCTYPE preferences SYSTEM "http://java.sun.com/dtd/preferences.dtd">
        
      将使用 UTF-8 字符编码。

      此方法是一般规则的异常,即在此类中并发执行多个方法的结果会产生等同于某些串行执行的结果。如果在调用此方法的同时修改了此节点上的首选项,则导出的首选项包含节点中包含的首选项的“模糊快照”;一些并发修改可能会反映在导出的数据中,而另一些可能不会。

      参数:
      os - 在其上发出 XML 文档的输出流。
      抛出:
      IOException - 如果写入指定的输出流导致 IOException
      BackingStoreException - 如果无法从后备存储中读取偏好数据。
      IllegalStateException - 如果此节点(或祖先节点)已使用 removeNode() 方法移除。
      参见:
    • exportSubtree

      public abstract void exportSubtree(OutputStream  os) throws IOException , BackingStoreException
      发出一个 XML 文档,表示此节点及其所有后代中包含的所有首选项。实际上,该 XML 文档是根植于该节点的子树的离线备份。

      XML 文档将具有以下 DOCTYPE 声明:

      
       <!DOCTYPE preferences SYSTEM "http://java.sun.com/dtd/preferences.dtd">
        
      将使用 UTF-8 字符编码。

      此方法是一般规则的异常,即在此类中并发执行多个方法的结果会产生等同于某些串行执行的结果。如果以该节点为根的子树中的首选项或节点在调用此方法的同时被修改,则导出的首选项包括子树的“模糊快照”;一些并发修改可能会反映在导出的数据中,而另一些可能不会。

      参数:
      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")
      参见: