Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 355|回复: 0

[Java基础知识]将数据写入注册表

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-1 10:58:26 | 显示全部楼层 |阅读模式
          我们经常需要将我们的程序中的设定,如窗口位置,开启过的文件,用户的选项设定等数据记录下来,以做便用户下一次开启程序能继续使用这些数据。
    以前我们通常的做法是使用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_USERSoftwareJavaSoftPrefs

    系统参数项在注册表中的根节点是:
    HKEY_LOCAL_MACHINESOFTWAREJavaSoftPrefs
    而我们指定的节点路径是位于这些根节点之下的.  二、如何读写数据
    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是如何为我们工作的,看看下面的例子:  
      
      
    1. import java.io.*;
    2. import java.util.prefs.*;
    3. public class PrefsDemo {
    4.   public static void main(String args[])
    5.   {
    6.     String keys[] =
    7.       {"sunway","copyright","author"};
    8.     String values[] =
    9.       {"sunway technology company","copyright 2002","turbochen@163.com"};
    10.     /* 建立一个位于user root下的/com/sunway/spc节点参数项*/
    11.     Preferences prefsdemo =
    12.       Preferences.userRoot().node("/com/sunway/spc");
    13.     /* 储存参数项*/
    14.     for (int i=0 ; i < keys.length; i++)
    15.     {
    16.       prefsdemo.put(keys[i], values[i]);
    17.     }
    18.     /* 导出到XML文件 */
    19.     try
    20.     {
    21.       FileOutputStream fos = new FileOutputStream("prefsdemo.xml");
    22.       prefsdemo.exportNode(fos);
    23.     } catch (Exception e)
    24.     {
    25.       System.err.println("Cannot export nodes: " + e);
    26.     }
    27.     /* 去掉注释可以清除注册表中的参数项*/
    28.     /*    try
    29.       {
    30.          prefsdemo.removeNode();
    31.       } catch (BackingStoreException e)
    32.       {
    33.       } */
    34.   }
    35. }
    36. 运行的结果是在注册表中添加了相应数据:
    37. [img]http://img.javaxxz.com/2014/10/1/105826547.gif[/img]
    38. 四、用下面方法可取回存在注册表中的数据:
    复制代码
    1. import java.io.*;
    2. import java.util.prefs.*;
    3. public class PrefsDemo1 {
    4.   public static void main(String args[])
    5.   {
    6.    
    7.     /* 建立一个位于user root下的/com/sunway/spc节点参数项*/
    8.     Preferences prefsdemo =
    9.       Preferences.userRoot().node("/com/sunway/spc");
    10.      System.out.println(prefsdemo.get("sunway","OK"));
    11.   }
    12. }
    13. 运行结果:
    14. C:java>java   PrefsDemo1
    15. sunway technology company
    复制代码
    C:java  以上介绍了Preferences功能,要了解更多Preferences的方法,请 查阅JDK文档java.util.prefs.Preferences
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-3 20:01 , Processed in 0.371601 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表