<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-86  評論-33  文章-0  trackbacks-0

    JAVA訪問注冊表

    --------------------------------------------------------------------------------
      (轉載: fengmin  2005-12-13 10:06:00 )

    JDK1.4下實現(xiàn)訪問WIN32注冊表 
    (通過  JSR  10)為  Java  1.4  增加的  java.util.prefs  包,通過提供對特定于實現(xiàn)的注冊表(例如,Windows  平臺上的  Windows  注冊表)的訪問能力,使您能夠操作用戶首選項數(shù)據(jù)和配置數(shù)據(jù)。 
    您是不是曾經(jīng)需要保存程序的配置數(shù)據(jù)但卻不知應將數(shù)據(jù)存儲在哪里?  雖然您可以使用屬性文件或資源束獲取這些信息,但  Java  平臺從未指定過用于存儲這些文件的標準位置。JSR  10  出現(xiàn)后一切都變了,它為  Java  1.4  API  提供增加的  java.util.prefs  包。存儲機制是特定于實現(xiàn)的細節(jié),但程序員不必知道,也不必操心。對于  Windows  平臺,它的位置是在“Windows  注冊表”。  您雖然不能夠對注冊表自由控制,但您的確可以通過一個公共根節(jié)點訪問所有的應用程序。 
     
    開始 
    命名很恰當?shù)?nbsp; Preferences  類提供操作首選項的基本框架。這個類提供了一系列靜態(tài)和抽象方法來操作兩套首選項(其中一套是用戶首選項,另一套是系統(tǒng)首選項)中的其中一套。  使用靜態(tài)方法,您會得到一個特定于平臺的實現(xiàn),就象  WindowsPreferences  類;  然后您可以使用由這個特定于平臺的實現(xiàn)實現(xiàn)的抽象方法來做這項工作。 
     
    用包將程序的首選項分組是個好習慣,可以避免與其它應用程序的命名沖突。  當您查找  Preferences  對象時,只需傳遞包的名稱。在使用非靜態(tài)方法時,  您可以傳遞對自身的引用(this),程序將為您確定查找的是哪個包,如清單  1  所示。 
     
    清單  1.  從非靜態(tài)方法獲取  Preferences  對象   

    Preferences  userPrefs  =  Preferences.userNodeForPackage(this);  
    Preferences  sysPrefs  
    =  Preferences.systemNodeForPackage(this);  

    但是,如果您使用的是靜態(tài)方法,您就必須得到根節(jié)點并自己提供包,如清單  2  所示。 
     
    清單  2.  從靜態(tài)方法獲取  Preferences  對象   

    Preferences  userPrefs  =  Preferences.userRoot().node("/net/zukowski/ibm");  
    Preferences  sysPrefs  
    =  Preferences.systemRoot().node("/net/zukowski/ibm");  

    有了進行操作的節(jié)點后,您就可以輕松地設置、獲取、除去和轉儲設置選項。只要把  Preferences  對象當作一個大的鍵  —  值散列表(這個表把樹形結構中的鍵組織起來)。可它不是“集合框架”(  Collections  Framework)的部件,(關于“集合框架”的更多信息,請參閱參考資料)。 
     
    寫數(shù)據(jù) 
    我們將從討論如何存儲首選項開始。Preferences  類提供一系列  put()  方法,如下所示,用于存儲值。除支持基本的字符串之外,您還可以存儲布爾值、雙精度數(shù)、浮點數(shù)、整型數(shù)、長整型數(shù)和字節(jié)數(shù)組(考慮序列化)。助手方法采用適當?shù)臄?shù)據(jù)類型并執(zhí)行必要的轉換以便將數(shù)據(jù)存儲為字符串。  

    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)  

    所有的  put()  方法都返回一個  void。如果存儲機制不可用,將拋出一個BackingStoreException。 
     
    注意:一個特定首選項的鍵長度被限制為  Preferences.MAX_KEY_LENGTH(80)個字符,而它的值被限制為  Preferences.MAX_VALUE_LENGTH(8192)個字符。 
     
    讀數(shù)據(jù) 
    可通過下面所示的一系列  get()  方法獲取特定的首選項。與寫數(shù)據(jù)相似,每種受支持的數(shù)據(jù)類型,都有自己的與眾不同的方法。但與獲取數(shù)據(jù)時不同的是,在備用存儲不可用,或有些東西尚未保存時您必須提供缺省值。這要求您確保自己的程序至少要有合理的缺省設置選項。  

    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)  

    如果您對首選項名稱不確定,您可以用  keys()  方法查找一列與節(jié)點相關聯(lián)的鍵。這個方法返回節(jié)點的  String[]。  除獲取和存儲個別首選項以及獲取一列關鍵字之外,您還可以用  clear()、remove()  和  removeNode()  除去節(jié)點和值。 
     
    轉儲數(shù)據(jù) 
    如果您想在系統(tǒng)提供的備用存儲器之外保存和恢復首選項,您可以在  XML  格式的文檔中執(zhí)行這些操作。您可以用  exportNode()  導出一個節(jié)點或用  exportSubtree()  導出整個子樹。信息以  UTF-8  格式存儲。然后,當您想恢復信息時,可使用  importPreferences()  方法。 
     
    偵聽 
    “好奇心會害死一只貓”,但如果您對弄清除首選項何時改變很感興趣,您可以注冊一個  NodeChangeListener  或  PreferenceChangeListener,而不考慮隨之而來的后果。NodeChangeListener  負責通知您節(jié)點被添加和除去的時間,  而  PreferenceChangeListener  告訴您值的變化。這些都緊跟著基本  JavaBeans  組件事件用  add/removeNodeChangeListener(NodeChangeListener)  和  add/removePreferenceChangeListener()  方法處理結構之后發(fā)生。基本上,您先實現(xiàn)偵聽器,然后注冊偵聽器,這樣您會發(fā)現(xiàn)將來的變化。 
     
    完整的示例 
    真的就這些。清單  3  為您提供了一個完整的示例來試驗新功能(也可從參考資料下載)。程序運行后會自己清除,所以如果您想在注冊表中找到值,請注釋掉程序尾部的清除代碼。 
     
    清單  3.  完整的示例   

     1 package  net.zukowski.ibm;  
     2  
     3 import  java.io.*;  
     4 import  java.util.prefs.*;  
     5  
     6 public  class  Prefs  {  
     7    public  static  void  main(String  args[])  {  
     8        String  denominations[]  =    
     9            {"One",  "Two",  "Five",  "Ten",  "Twenty"};  
    10        String  pictures[]  =    
    11            {"Washington",  "Jefferson",  "Lincoln",  "Hamilton",  "Jackson"};  
    12  
    13        NodeChangeListener  nodeChangeListener  =    
    14            new  NodeChangeListener()  {  
    15                public  void  childAdded(NodeChangeEvent  event)  {  
    16                    Preferences  parent  =  event.getParent();  
    17                    Preferences  child    =  event.getChild();  
    18                    System.out.println(parent.name()  +  "  has  a  new  child  "  +  
    19                        child.name());  
    20                }  
    21                public  void  childRemoved(NodeChangeEvent  event)  {  
    22                    Preferences  parent  =  event.getParent();  
    23                    Preferences  child    =  event.getChild();  
    24                    System.out.println(parent.name()  +  "  lost  a  child  "  +  
    25                        child.name());  
    26                }  
    27            };  
    28  
    29        PreferenceChangeListener  preferenceChangeListener  =    
    30            new  PreferenceChangeListener()  {  
    31                public  void  preferenceChange(PreferenceChangeEvent  event)  {  
    32                    String  key  =  event.getKey();  
    33                    String  value  =  event.getNewValue();  
    34                    Preferences  node  =  event.getNode();  
    35                    System.out.println(node.name()  +  "  now  has  a  value  of  "  +    
    36                        value  +  "  for  "  +  key);  
    37                }  
    38            };  
    39  
    40        //  Look  up  user  root  
    41        Preferences  prefs  =    
    42            Preferences.userRoot().node("/net/zukowski/ibm");  
    43  
    44        //  Add  listeners  
    45        prefs.addNodeChangeListener(nodeChangeListener);  
    46        prefs.addPreferenceChangeListener(preferenceChangeListener);  
    47  
    48        //  Save  a  bunch  of  key-value  pairs  
    49        for  (int  i=0,  n=denominations.length;  i  <  n;  i++)  {  
    50            prefs.put(denominations[i],  pictures[i]);  
    51        }  
    52  
    53        //  Display  all  the  entries  
    54        try  {  
    55            String  keys[]  =  prefs.keys();  
    56            for  (int  i=0,  n=keys.length;  i  <  n;  i++)  {  
    57                System.out.println(keys[i]  +  ":  "  +  prefs.get(keys[i],  "Unknown"));  
    58            }  
    59        }  catch  (BackingStoreException  e)  {  
    60            System.err.println("Unable  to  read  backing  store:  "  +  e);  
    61        }  
    62  
    63        //  Create  child  
    64        Preferences  child  =  Preferences.userRoot().node("/net/zukowski/ibm/foo");  
    65  
    66        //  Save  to  XML  file  
    67        try  {  
    68            FileOutputStream  fos  =  new  FileOutputStream("prefs.out");  
    69            prefs.exportNode(fos);  
    70        }  catch  (Exception  e)  {  
    71            System.err.println("Unable  to  export  nodes:  "  +  e);  
    72        }  
    73  
    74        //  Clean  up  
    75        try  {  
    76            prefs.removeNode();  
    77        }  catch  (BackingStoreException  e)  {  
    78            System.err.println("Unable  to  access  backing  store:  "  +  e);  
    79        }  
    80  
    81    }  
    82 
    83 
    posted on 2006-02-06 09:14 Derek.Guo 閱讀(673) 評論(0)  編輯  收藏 所屬分類: Java
    MSN:envoydada@hotmail.com QQ:34935442
    主站蜘蛛池模板: 久久青青草原亚洲av无码| 国产亚洲人成网站在线观看| 色视频在线观看免费| AV在线播放日韩亚洲欧| 日韩免费高清大片在线| 国产精品亚洲一区二区麻豆| 亚洲国产91精品无码专区| 久久久久免费看成人影片| 2020亚洲男人天堂精品| 亚洲伊人成无码综合网 | 国产资源免费观看| 99久久精品毛片免费播放| 亚洲娇小性xxxx| 亚洲一区二区三区偷拍女厕| 国产成人无码免费看视频软件| 色爽黄1000部免费软件下载| 亚洲精品国产专区91在线| 亚洲人成无码网WWW| 国拍在线精品视频免费观看 | 色婷婷综合缴情综免费观看| 亚洲欧洲日产韩国在线| 亚洲一级Av无码毛片久久精品 | 又大又硬又爽免费视频| 一级成人a毛片免费播放| 免费激情网站国产高清第一页| 亚洲精品视频免费在线观看| 在线精品亚洲一区二区小说| 日韩电影免费在线观看视频| 7x7x7x免费在线观看| jyzzjyzz国产免费观看| 亚洲国产精品无码中文lv| 亚洲精品美女在线观看| 亚洲精品成人网站在线观看| 日韩亚洲国产二区| 免费黄色毛片视频| 最近免费mv在线电影| 免费无码H肉动漫在线观看麻豆| 337P日本欧洲亚洲大胆精品| 亚洲AV成人一区二区三区在线看| 午夜亚洲国产理论秋霞| 国产亚洲av人片在线观看|