挨踢step by step

宁可挨踢,不可露怯。知耻而后勇!

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  0 Posts :: 6 Stories :: 0 Comments :: 0 Trackbacks
我们经常需要将我们的程序中的设定,如窗口位置,开启过的文件,用户的选项设定等数据记录下来,以做便用户下一次开启程序能继续使用这些数据。 
以前我们通常的做法是使用Properties类,它提供以下方法: 
void  load(InputStream inStream) 
void  store(OutputStream out, String header) 
String getProperty(String key, String defaultValue) 
String getProperty(String key) 

这些方法让我们很容易的存取设定数据。
另外的办法是使用ResourceBundle这个类来储存设定数据,甚至有些程序作者使用一个自定结构的文件来储存设定数据。 


   现在好了,JDK1.4为我们提供的java.util.prefs包,为我们提供了另一种选择,里面有一个Preferences类,能让以上的工作变得极其轻松
!  

    写VB程序的人常常用SaveSetting函数和getSettging来存取注册表中的用户设定数据。而Java的Preferences类也提供了类似的机制。 
Preferences类在不同的平台中有不同的实现方式。而在Windows平台中,Preferences是将数据保存在注册表中的,而在其它平台中的实现我就不得而知了(我对Linux等系统都不太了解). 
但不管怎样,都是通过相同的接口来使用的,程序作者可以不管实现细节。 

一、建立Preferences对象 
为了区分不同的应用程序的参数项,在建立Preferences时要指定一个节点路径。 
Preferences是一个抽象类,提供了一系列静态方法和抽象方法来操作参数项: 

抽象方法: 
Preferences userData 
=  Preferences.userNodeForPackage( this ); 
Preferences sysData 
=  Preferences.systemNodeForPackage( this ); 
这两个方法是从指定的类所在的包(
package )返回一个节点路径,如this是javax.swing.JComponent,则返回 / javax / swing 

静态方法: 
Preferences userData 
=  Preferences.userRoot().node( " /com/sunway/spc " ); 
Preferences sysData 
=  Preferences.systemRoot().node( " /com/sunway/spc " ); 

以上每种方式提供了两套操作方法。其中一套是用户参数项,另一套是系统参数项。 
在Windows平台中,用户参数项在注册表中的根节点是:
HKEY_CURRENT_USER\Software\JavaSoft\Prefs 

系统参数项在注册表中的根节点是:
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs 
而我们指定的节点路径是位于这些根节点之下的. 

二、如何读写数据 
Preferences提供了多种类型数据的读写方法。 先来看写(put)的方法:
put(String key, String value) 
putBoolean(String key, 
boolean  value) 
putByteArray(String key, 
byte  value[]) 
putDouble(String key, 
double  value) 
putFloat(String key, 
float  value) 
putInt(String key, 
int  value) 
putLong(String key, 
long  value) 

下面的是读(get)的方法, 
get(String key, String 
default
getBoolean(String key, 
boolean   default
getByteArray(String key, 
byte   default []) 
getDouble(String key, 
double   default
getFloat(String key, 
float   default
getInt(String key, 
int   default
getLong(String key, 
long   default

注意,每一种get方法的第二个参数需要我们为它指定缺省的参数。 
除了以上方式之外,Preferences还允许我们将它的数据导出到一个XML文件保存:
void  exportNode(OutputStream os) 
void  exportSubtree(OutputStream os) 
我们可以导出一个节点,或是导出整个子节点树。

三、Preferences的一个演示 
以上的讲解足可以写一个示例来看看Preferences是如何为我们工作的,看看下面的例子: 

  


 

import  java.io. * ;
import  java.util.prefs. * ;

public   class  PrefsDemo  {
  
public   static   void  main(String args[])
  
{
    String keys[] 
=
      
{ " sunway " , " copyright " , " author " } ;
    String values[] 
=
      
{ " sunway technology company " , " copyright 2002 " , " turbochen@163.com " } ;

    
/*  建立一个位于user root下的/com/sunway/spc节点参数项 */
    Preferences prefsdemo 
=
      Preferences.userRoot().node(
" /com/sunway/spc " );

    
/*  储存参数项 */
    
for  ( int  i = 0  ; i  <  keys.length; i ++ )
    
{
      prefsdemo.put(keys[i], values[i]);
    }


    
/*  导出到XML文件  */
    
try
    
{
      FileOutputStream fos 
=   new  FileOutputStream( " prefsdemo.xml " );
      prefsdemo.exportNode(fos);
    }
  catch  (Exception e)
    
{
      System.err.println(
" Cannot export nodes:  "   +  e);
    }


    
/*  去掉注释可以清除注册表中的参数项 */
    
/*     try
      {
         prefsdemo.removeNode();
      } catch (BackingStoreException e)
      {
      } 
*/


  }

}



运行的结果是在注册表中添加了相应数据:四、用下面方法可取回存在注册表中的数据:

import  java.io. * ;
import  java.util.prefs. * ;

public   class  PrefsDemo1  {
  
public   static   void  main(String args[])
  
{
   
    
/*  建立一个位于user root下的/com/sunway/spc节点参数项 */
    Preferences prefsdemo 
=
      Preferences.userRoot().node(
" /com/sunway/spc " );

     System.out.println(prefsdemo.get(
" sunway " , " OK " ));

  }

}


运行结果:C:\java
> java   PrefsDemo1sunway technology company
C:\java

以上介绍了Preferences功能,要了解更多Preferences的方法,请 查阅JDK文档java.util.prefs.Preferences 
posted on 2006-11-09 15:40 AaronJin 阅读(436) 评论(0)  编辑  收藏 所属分类: Java转贴