Java util Preferences构造函数

时间:2013-05-03 14:23:24

标签: java preferences

我试图了解java.util.prefs.Preferences的不同构造函数是如何工作的,并且不确定在不同情况下使用哪些构造函数。

首先,是否Preferences将首选项/属性保存到文件?换句话说,我可以使用此类在我的应用程序运行中存储首选项,或者是否所有内容都保存在 - 存储器?

就构造函数而言,实例化Preferences只有几种方法:

Preferences p = new Preferences();
Preferences p = Preferences.userNodeForPackage(this.getClass());
Preferences p = Preferences.userRoot();

这些构造函数的API docs如下(分别):

  

唯一的构造函数。

     

从调用用户的首选项树返回首选项节点,该首选项树(按照惯例)与指定的类包关联。

     

返回主叫用户的根首选项节点。

所以我想我对不同的Preferences实例,Java类(useNodeForPackage(Class<?>) ???)和最终用户之间的关系感到困惑。所以我问:每个构造函数/工厂方法的作用与另一个不同,何时使用每个?

提前致谢!

2 个答案:

答案 0 :(得分:3)

“首先,首选项是否将首选项/属性保留为文件?”

是的,数据是持久的。不,它不会必然将它们写入文件。存储方法是实现定义的,它可以将它们存储在远程数据库,注册表或二进制文件附带的实际文件中。在Windows上,默认实现会写入注册表。 (这是在您链接的API文档的顶部写的)

“每个构造函数/工厂方法的作用与另一个不同,何时使用每个?”

Preferences p = new Preferences();

这不能直接调用为@ ojota84在他们的帖子中提到,它由以下工厂方法使用:

Preferences p = Preferences.userNodeForPackage(this.getClass());

这允许Preferences实现返回特定于给定类的Preferences对象,并且不会干扰其他类的首选项。在Windows上,这通常会返回一个Preferences对象,该对象将密钥存储到HKU\Software\JavaSoft\Prefs\myapplication\myclass\中。在XML支持的文件中,这可能对应于<myapplication><myclass>-data here-</myclass></myapplication>

Preferences p = Preferences.userRoot();

这与上面的类似,但返回所有用户首选项的根对象。如果您将偏好视为排列在树中。那么这是有道理的。在Windows上,这通常使用HKU\Software\JavaSoft\Prefs\myapplication\实现。 XML类比是您要访问<myapplication>-data here-</myapplication>

userRoot()userNodeForPackage()

之间进行选择

本质上它是一个偏好的问题(双关语不是意图)。如果您只需要存储一个或两个密钥,userRoot()将在您的注册表中创建更少的条目。如果你需要编写大量的密钥,那么userNodeForPackage()可能会更好,因为你可以避免名称冲突和其他问题。无论是支持您的首选项,还是XML文件,数据库或Windows注册表,您都可以获得更清晰的结构。

答案 1 :(得分:1)

注意新的Preferences()受到保护,它只能由子类实例化。

userNodeForPackage和systemNodeForPackage根据您提供的API java doc中描述的约定从路径中获取首选项。

userRoot和systemRoot是位于用户路径或系统路径的节点,这在您提供的API java doc的第一段中也有描述