﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Dragon4s-文章分类-Java</title><link>http://www.blogjava.net/Dragon4s/category/52448.html</link><description>天若有情天亦老,人间正道是沧桑。</description><language>zh-cn</language><lastBuildDate>Wed, 22 Aug 2012 12:11:43 GMT</lastBuildDate><pubDate>Wed, 22 Aug 2012 12:11:43 GMT</pubDate><ttl>60</ttl><item><title>[Z]java.util.prefs.Preferences用法 </title><link>http://www.blogjava.net/Dragon4s/articles/386028.html</link><dc:creator>Dragon4s</dc:creator><author>Dragon4s</author><pubDate>Wed, 22 Aug 2012 06:28:00 GMT</pubDate><guid>http://www.blogjava.net/Dragon4s/articles/386028.html</guid><wfw:comment>http://www.blogjava.net/Dragon4s/comments/386028.html</wfw:comment><comments>http://www.blogjava.net/Dragon4s/articles/386028.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Dragon4s/comments/commentRss/386028.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Dragon4s/services/trackbacks/386028.html</trackback:ping><description><![CDATA[<div>
<p>我们经常需要将我们的程序中的设定，如窗口位置，开启过的文件，用户的选项设定等数据记录下来，以做便用户下一次开启程序能继续使用这些数据。<br />
以前我们通常的做法是使用Properties类，它提供以下方法:<br />
<span style="color: red;">void load(InputStream inStream)</span><br /><span style="color: red;">
void store(OutputStream out, String header)</span><br /><span style="color: red;">
String getProperty(String key, String defaultValue)</span><br /><span style="color: red;">
String getProperty(String key)</span><br />
这些方法让我们很容易的存取设定数据.<br />
另外的办法是使用ResourceBundle这个类来储存设定数据，甚至有些程序作者使用一个自定结构的文件来储存设定数据。<br />
但不管怎样，最让程序作者头痛的是：我该将这些数据保存在哪？</p>
<p>现在好了，JDK1.4为我们提供的java.util.prefs包，里面有一个Preferences类，能让以上的工作变得极其轻松!<br />
写VB程序的人常常用SaveSetting函数和getSettging来存取注册表中的用户设定数据。而Java的Preferences类也提供了类似的机制。<br />
<span style="color: red;">Preferences类在不同的平台中有不同的实现方式。而在Windows平台中，<u><strong>Preferences是将数据保存在注册表中的</strong></u>，而在其它平台中的实现我就不得而知了(我对Linux等系统都不太了解).</span><br />
但不管怎样，都是通过相同的接口来使用的，程序作者可以不管实现细节。</p>
<p><span style="font-size: medium;"><strong><em>建立Preferences对象</em> </strong> <br />
</span> 为了区分不同的应用程序的参数项，在建立Preferences时要指定一个节点路径。<br />
Preferences是一个抽象类，提供了一系列静态方法和抽象方法来操作参数项:<br />
抽象方法:<br />
<span style="color: #0000ff;">Preferences userData = Preferences.userNodeForPackage(this);<br />
Preferences sysData = Preferences.systemNodeForPackage(this);<br />
</span> 这两个方法是从指定的物件所在的包(package)返回一个节点路径，如this是javax.swing.JComponent,则返回/javax/swing<br />
静态方法:<br />
<span style="color: #0000ff;">Preferences userData = Preferences.userRoot().node("/com/sunway/spc");<br />
Preferences sysData = Preferences.systemRoot().node("/com/sunway/spc");</span> </p>
<p>以上每种方式提供了两套操作方法。其中一套是用户参数项，另一套是系统参数项。<br />
<strong>在Windows平台中，用户参数项在注册表中的根节点是<br /><span style="color: #ff0000;">HKEY_CURRENT_USER/Software/JavaSoft/Prefs<br />
</span> 系统参数项在注册表中的根节点是</strong>
<strong><br /><span style="color: #ff0000;">HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Prefs</span></strong>
<strong> <br />
而我们指定的节点路径是位于这些根节点之下的.</strong></p>
<p><strong><em><span style="font-size: medium;">如何读写数据</span> </em> </strong> <br />
Preferences提供了多种类型数据的读写方法。<br />
先来看写(put)的方法,<br />
<span style="color: #0000ff;">put(String key, String value)<br />
putBoolean(String key, boolean value)<br />
putByteArray(String key, byte value[])<br />
putDouble(String key, double value)<br />
putFloat(String key, float value)<br />
putInt(String key, int value)<br />
putLong(String key, long value)<br />
</span> 下面的是读(get)的方法,<br />
<span style="color: #0000ff;">get(String key, String default)<br />
getBoolean(String key, boolean default)<br />
getByteArray(String key, byte default[])<br />
getDouble(String key, double default)<br />
getFloat(String key, float default)<br />
getInt(String key, int default)<br />
getLong(String key, long default)<br />
</span> 注意，每一种get方法的第二个参数需要我们为它指定缺省的参数。<br />
除了以上方式之外，Preferences还允许我们将它的数据导出到一个XML文件保存，<br />
<span style="color: #0000ff;">void exportNode(OutputStream os)<br />
void exportSubtree(OutputStream os)<br />
</span> 我们可以导出一个节点，或是导出整个子节点树.</p>
<p><strong><em>Preferences的一个演示</em> </strong> <br />
以上的讲解足可以写一个示例来看看Preferences是如何为我们工作的,看看下面的例子:<br />
<span style="color: #3300ff;">import java.io.*;<br />
import java.util.prefs.*;</span> </p>
<p><span style="color: #3300ff;">public class PrefsDemo {<br />
public static void main(String args[])<br />
{<br />
&nbsp;&nbsp;&nbsp; String keys[] =<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {"sunway","copyright","author"};<br />
&nbsp;&nbsp;&nbsp; String values[] =<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {"sunway technology company","copyright </span> <a style="font-size: 12px; color: blue; text-decoration: underline;" href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#50;&#48;&#48;&#50;"><span style="color: #3300ff;">2002","turbochen@163.com"}</span> </a> <span style="color: #3300ff;">;</span> </p>
<p><span style="color: #3300ff;">&nbsp;&nbsp;&nbsp; <span style="color: #55aa55;">/* 建立一个位于user root下的/com/sunway/spc节点参数项*/</span> <br />
&nbsp;&nbsp;&nbsp; Preferences prefsdemo =<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Preferences.userRoot().node("/com/sunway/spc");</span> </p>
<p><span style="color: #3300ff;">&nbsp;&nbsp;&nbsp; <span style="color: #66aa55;">/* 储存参数项*/</span> <br />
&nbsp;&nbsp;&nbsp; for (int i=0 ; i &lt; keys.length; i++)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prefsdemo.put(keys[i], values[i]);<br />
&nbsp;&nbsp;&nbsp; }</span> </p>
<p><span style="color: #3300ff;">&nbsp;&nbsp;&nbsp; <span style="color: #5ea25e;">/* 导出到XML文件 */</span> <br />
&nbsp;&nbsp;&nbsp; try<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileOutputStream fos = new FileOutputStream("prefsdemo.xml");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prefsdemo.exportNode(fos);<br />
&nbsp;&nbsp;&nbsp; } catch (Exception e)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.err.println("Cannot export nodes: " + e);<br />
&nbsp;&nbsp;&nbsp; }</span> </p>
<p><span style="color: #3300ff;">&nbsp;&nbsp;&nbsp; </span> <span style="color: #5ea25e;">/* 去掉注释可以清除注册表中的参数项*/<br />
/*&nbsp;&nbsp;&nbsp; try<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prefsdemo.removeNode();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (BackingStoreException e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } */</span> </p>
<p><span style="color: #3300ff;">}<br />
}</span> </p>
<p>以上介绍了Preferences功能，要了解更多Preferences的方法，请<a style="font-size: 12px; color: blue; text-decoration: underline;" href="http://java.sun.com/j2se/1.4/docs/api/java/util/prefs/Preferences.html">查阅JDK文档java.util.prefs.Preferences</a> </p>
<p>转自：http://hi.baidu.com/wiselyman/blog/item/09c76c2798db5d0a918f9d8e.html</p>
</div><img src ="http://www.blogjava.net/Dragon4s/aggbug/386028.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Dragon4s/" target="_blank">Dragon4s</a> 2012-08-22 14:28 <a href="http://www.blogjava.net/Dragon4s/articles/386028.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]java.util.Preferences 数据管理</title><link>http://www.blogjava.net/Dragon4s/articles/386025.html</link><dc:creator>Dragon4s</dc:creator><author>Dragon4s</author><pubDate>Wed, 22 Aug 2012 05:48:00 GMT</pubDate><guid>http://www.blogjava.net/Dragon4s/articles/386025.html</guid><wfw:comment>http://www.blogjava.net/Dragon4s/comments/386025.html</wfw:comment><comments>http://www.blogjava.net/Dragon4s/articles/386025.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Dragon4s/comments/commentRss/386025.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Dragon4s/services/trackbacks/386025.html</trackback:ping><description><![CDATA[<div><span style="color: red;">java.util.Preferences </span>这是一个抽象类,具体有什么用呢?<br />
<span style="color: red;">主要用于保存用户或系统相关的数据</span>(&nbsp;&nbsp;比如:&nbsp;我们希望某个用户设置自己的主题,下次再登录进系统时,仍然是这个主题...&nbsp; ),具体的作用功能什么的我不做多的介绍...
<div>&nbsp;&nbsp;&nbsp; 由于这个类属于抽象类,所以不能直接通过new来创建,不过它提供了几个static method ,其实底层还是通过调用子类的实现来操作的..</div>
<div>&nbsp;&nbsp;&nbsp; Preferences的数据是可以跨平台的,在Windows下,设置的这些属性会添加到'注册表'中,Linux 或 Unix 我没有研究过...</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img alt="" src="http://img1.51cto.com/attachment/201208/235927312.jpg" border="0" /></div>
<div>&nbsp;</div>
<div>&nbsp;&nbsp;&nbsp; 不多说,直接贴出源代码(代码中有详细的注释):</div>
<div>
<div>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; line-height: 16px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 4px; font-family: verdana,宋体; color: #000000; font-size: 10pt; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px">package com.lixing.util; <br />
<br />
import java.io.File; <br />
import java.io.FileNotFoundException; <br />
import java.io.FileOutputStream; <br />
import java.io.IOException; <br />
import java.io.OutputStream; <br />
import java.util.prefs.BackingStoreException; <br />
import java.util.prefs.Preferences; <br />
<br />
/** <br />
* Preferences有两种保存文件的方式: <br />
*&nbsp;&nbsp;&nbsp;<span style="color: red;">&nbsp;1.</span><span style="color: red;"> sysRoot 与系统有关的用户配置文件,此文件只要是系统用户都可以访问 </span><br />
<span style="color: red;">*&nbsp;&nbsp;&nbsp;&nbsp;2. userRoot 与用户有关的用户配置文件,只有该用户才可以访问 </span><br />
*&nbsp;&nbsp;&nbsp;&nbsp;但两者的操作方法完全一样 <br />
*&nbsp;&nbsp;&nbsp;&nbsp; <br />
* @author Administrator <br />
* <br />
*/ <br />
public class PreferencesTest { <br />
&nbsp;&nbsp;private String[] keys = { "userName", "userPwd", "userEmail" }; <br />
&nbsp;&nbsp;private String[] values = { "Lixing", "123456", "hnlixing520@126.com" }; <br />
<br />
&nbsp;&nbsp;/** <br />
&nbsp;&nbsp;&nbsp;&nbsp;* 设置Preferences的值 <br />
&nbsp;&nbsp;&nbsp;&nbsp;* @param userRoot <br />
&nbsp;&nbsp;&nbsp;&nbsp;*/ <br />
&nbsp;&nbsp;private&nbsp;&nbsp;&nbsp;&nbsp;void setPreference(Preferences userRoot) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;for (int i = 0; i &lt; keys.length; i++) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userRoot.put(keys[i], values[i]); <br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
<br />
&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;/** <br />
&nbsp;&nbsp;&nbsp;&nbsp;* 获得Preferences的指定值 <br />
&nbsp;&nbsp;&nbsp;&nbsp;* @param userRoot <br />
&nbsp;&nbsp;&nbsp;&nbsp;*/ <br />
&nbsp;&nbsp;private void getPreference(Preferences userRoot){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println( "userName: " + userRoot.get("userName", "佚名") ); <br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println( "userPwd: " + userRoot.get("userPwd", "0000") ); <br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println( "userEmail: " + userRoot.get("userEmail", "xxx@126.com") ); <br />
&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;/** <br />
&nbsp;&nbsp;&nbsp;&nbsp;* 移除Preferences的首层包 <br />
&nbsp;&nbsp;&nbsp;&nbsp;* @param userRoot <br />
&nbsp;&nbsp;&nbsp;&nbsp;*/ <br />
&nbsp;&nbsp;private void removeNode(Preferences userRoot){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;try { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userRoot.removeNode(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;} catch (BackingStoreException e) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println( "removeNode success" ); <br />
&nbsp;&nbsp;} <br />
<br />
&nbsp;&nbsp;/** <br />
&nbsp;&nbsp;&nbsp;&nbsp;* 以树型结构导出为XML <br />
&nbsp;&nbsp;&nbsp;&nbsp;* @param userRoot <br />
&nbsp;&nbsp;&nbsp;&nbsp;*/ <br />
&nbsp;&nbsp;private void exportSubTree(Preferences userRoot) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;OutputStream os = null; <br />
&nbsp;&nbsp;&nbsp;&nbsp;File file =new File("preferences.xml"); <br />
&nbsp;&nbsp;&nbsp;&nbsp;try { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os = new FileOutputStream( file ); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userRoot.exportSubtree(os); <br />
&nbsp;&nbsp;&nbsp;&nbsp;} catch (FileNotFoundException e) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;} catch (IOException e) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;} catch (BackingStoreException e) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;} finally { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os.close(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} catch (IOException e) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println( "export tree success filename " + file.getName() ); <br />
&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;public static void main(String[] args) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;PreferencesTest test = new PreferencesTest(); <br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;//以包的方式建立用户配置,目的就是防止冲突,便于管理 <br />
&nbsp;&nbsp;&nbsp;&nbsp;Preferences userRoot = Preferences.userNodeForPackage(PreferencesTest.class); <br />
&nbsp;&nbsp;&nbsp;&nbsp;test.setPreference(userRoot); <br />
&nbsp;&nbsp;&nbsp;&nbsp;test.exportSubTree(userRoot); <br />
&nbsp;&nbsp;&nbsp;&nbsp;test.getPreference(userRoot); <br />
&nbsp;&nbsp;&nbsp;&nbsp;test.removeNode(userRoot); <br />
&nbsp;&nbsp;} <br />
}</div>
</div>
</div>
<div>&nbsp;</div>
<p>本文出自 &#8220;<a href="http://kinglixing.blog.51cto.com">李新博客</a>&#8221; 博客，请务必保留此出处<a href="http://kinglixing.blog.51cto.com/3421535/968777">http://kinglixing.blog.51cto.com/3421535/968777</a></p>
</div><img src ="http://www.blogjava.net/Dragon4s/aggbug/386025.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Dragon4s/" target="_blank">Dragon4s</a> 2012-08-22 13:48 <a href="http://www.blogjava.net/Dragon4s/articles/386025.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>