Java Preferences 使用方法

况喜
2023-12-01
JDK1.4为我们提供的java.util.prefs包,里面有一个Preferences类,能让以上的工作变得极其轻松!

写VB程序的人常常用SaveSetting函数和getSettging来存取注册表中的用户设定数据。而Java的Preferences类也提供了类似的机制。

如果我说Java里面可以不使用JNI的手段操作Windows的注册表你信不信?很多软件的菜单里都有“Setting”或“Preferences”这样的选项用来设定或修改软件的配置,这些配置信息可以保存到一个像上面所述的配置文件当中,如果是Windows平台下,也可能会保存到系统注册表中。从JDK 1.4开始,Java在java.util下加入了一个专门处理用户和系统配置信息的java.util.prefs包,其中一个类Preferences是一种比较“高级”的玩意。从本质上讲,Preferences本身是一个与平台无关的东西,但不同的OS对它的SPI(Service Provider Interface)的实现却是与平台相关的,因此,在不同的系统中你可能看到首选项保存为本地文件、LDAP目录项、数据库条目等,像在Windows平台下,它就保存到了系统注册表中,Linux中它存在于用户目录下的一个隐藏文件中。不仅如此,你还可以把首选项导出为XML文件或从XML文件导入。 

主要类与方法和描述 

systemNodeForPackage() //根据指定的Class对象得到一个Preferences对象,这个对象的注册表路径是从“HKEY_LOCAL_MACHINE\”开始的 
systemRoot() //得到以注册表路径HKEY_LOCAL_MACHINE\SOFTWARE\Javasoft\Prefs 为根结点的Preferences对象 
userNodeForPackage() //根据指定的Class对象得到一个Preferences对象,这个对象的注册表路径是从“HKEY_CURRENT_USER\”开始的 
userRoot() //得到以注册表路径HKEY_CURRENT_USER\SOFTWARE\Javasoft\Prefs 为根结点的Preferences对象 
putXXX() //设置一个属性的值,这里XXX可以为基本数值型类型,如int、long等,但首字母大写,表示参数为相应的类型,也可以不写而直接用put,参数则为字符串 
getXXX() //得到一个属性的值 
exportNode() //将全部首选项导出为一个XML文件 
exportSubtree() //将部分首选项导出为一个XML文件 
importPreferences() //从XML文件导入首选项 
    你可以按如下步骤保存数据:

Preferences myPrefs1 = Preferences.userNodeForPackage(this);// 这种方法是在“HKEY_CURRENT_USER\”下按当前类的路径建立一个注册表项
Preferences myPrefs2 = Preferences.systemNodeForPackage(this);// 这种方法是在“HKEY_LOCAL_MACHINE\”下按当前类的路径建立一个注册表项
Preferences myPrefs3 = Preferences.userRoot().node("com.jungleford.demo");// 这种方法是在“HKEY_CURRENT_USER\SOFTWARE\Javasoft\Prefs\”下按“com\jungleford\demo”的路径建立一个注册表项
Preferences myPrefs4 = Preferences.systemRoot().node("com.jungleford.demo");// 这种方法是在“HKEY_LOCAL_MACHINE\SOFTWARE\Javasoft\Prefs\”下按“com\jungleford\demo”的路径建立一个注册表项
myPrefs1.putInt("key1", 10);
myPrefs1.putDouble("key2", -7.15);
myPrefs1.put("key3", "value3");
FileOutputStream out = new FileOutputStream("prefs.xml");
myPrefs1.exportNode(out);


最终如果导出来可以看到的XML文件的形式如下;
----------------------
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE preferences SYSTEM "http://java.sun.com/dtd/preferences.dtd">
<preferences EXTERNAL_XML_VERSION="1.0">
  <root type="user"> <!--userRoot()--->
    <map/>
    <node name="PreferenceTest">
      <map>
        <entry key="Test2" value="Hello Europa"/>
        <entry key="Test3" value="45"/>
      </map>
    </node>
  </root>
</preferences>
----------------------
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE preferences SYSTEM "http://java.sun.com/dtd/preferences.dtd">
<preferences EXTERNAL_XML_VERSION="1.0">
  <root type="system">
    <map/>
    <node name="fanfu">
      <map>
        <entry key="Test2" value="Hello Europa"/>
        <entry key="Test3" value="45"/>
      </map>
    </node>
  </root>
</preferences>
----------------------
相应的JAVA代码
----------------------
import java.util.prefs.Preferences;       
import java.io.*;     
public class PreferenceTest {       
private Preferences prefs;       
     
public void setPreference() {       
// This will define a node in which the preferences can be stored       
prefs = Preferences.userRoot().node("fanfu");       
String ID1 = "Test1";       
String ID2 = "Test2";       
String ID3 = "Test3";       
     
    
prefs.remove(ID1);  
prefs.remove(ID2);  
prefs.remove(ID3); 
// First we will get the values       
// Define a boolean value  
System.out.println(prefs.getBoolean(ID1, true));       
// Define a string with default "Hello World       
System.out.println(prefs.get(ID2, "Hello World"));       
// Define a integer with default 50       
System.out.println(prefs.getInt(ID3, 50));       
     
// Now set the values       
prefs.putBoolean(ID1, false);       
prefs.put(ID2, "Hello Europa");       
prefs.putInt(ID3, 45);     
  System.out.println("------------------------------");   
  System.out.println(prefs.getBoolean(ID1, true));    
  System.out.println(prefs.get(ID2, "Hello World"));  
  System.out.println(prefs.getInt(ID3, 50));   
// Delete the preference settings for the first value       
prefs.remove(ID1);  
System.out.println("------------------------------");   
    System.out.println(prefs.getBoolean(ID1, true));    
  System.out.println(prefs.get(ID2, "Hello World"));  
  System.out.println(prefs.getInt(ID3, 50));      
}       
     
public static void main(String[] args) throws Exception {       
     PreferenceTest test = new PreferenceTest();       
     test.setPreference();   
     
     for(String key : test.prefs.keys())
     {
          System.out.println(test.prefs.get(key,null));
     }
     FileOutputStream out = new FileOutputStream("out2.xml");
     test.prefs.exportNode(out);

}       
}   

 类似资料: