在我們寫程序的時(shí)候,有時(shí)會(huì)要求保存一些數(shù)據(jù),比如用戶名或者別的,但是這樣數(shù)據(jù)又不是保存在程序同一目錄下,這樣做太明顯了,也不太安全,那怎么辦呢?這個(gè)時(shí)候,如果能把數(shù)據(jù)保存到注冊(cè)表里面去,那該多好,一來(lái)隱蔽,二來(lái)方便,不至于在程序目錄下生成一大片文件.
在JAVA里面,可以利用java.util.prefs.Preferences來(lái)對(duì)注冊(cè)表進(jìn)行操作,我們先看一下例子吧
/*
* Test3.java
*
* Created on 2007-9-20, 18:41:41
*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package test1;
import java.util.prefs.Preferences;
/**
*
* @author hadeslee
*/
public class Test3 {
public static void main(String[] args)throws Exception {
Preferences pre=Preferences.systemNodeForPackage(Test3.class);
pre.put("userName", "hadeslee");
pre.putInt("age", 25);
pre.flush();
Preferences now=Preferences.systemNodeForPackage(Test3.class);
System.out.println(now.get("userName", "為空"));
System.out.println(now.getInt("age", 0));
}
}
* Test3.java
*
* Created on 2007-9-20, 18:41:41
*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package test1;
import java.util.prefs.Preferences;
/**
*
* @author hadeslee
*/
public class Test3 {
public static void main(String[] args)throws Exception {
Preferences pre=Preferences.systemNodeForPackage(Test3.class);
pre.put("userName", "hadeslee");
pre.putInt("age", 25);
pre.flush();
Preferences now=Preferences.systemNodeForPackage(Test3.class);
System.out.println(now.get("userName", "為空"));
System.out.println(now.getInt("age", 0));
}
}
這是一個(gè)最簡(jiǎn)單的例子,第一句就是根據(jù)包得到一個(gè)節(jié)點(diǎn),然后把一些值放進(jìn)去,可以放String,boolean,int,long,float,double等值 ,如果你想存入對(duì)象的話,可以把對(duì)象序列化成byte[],然后再存進(jìn)來(lái),然后讀也是一樣的,我們這樣操作就像是在操作一個(gè)Map一個(gè),所有的值都是存在這個(gè)映射里面.
那么它們保存在哪里呢?
如果選的是systemNode...則保存在[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs]
如果選的是userNode.... 則保存在[HKEY_CURRENT_USER\Software\JavaSoft\Prefs]
的子節(jié)點(diǎn)下面
不過(guò)話又說(shuō)回來(lái),如果我們想程序跨平臺(tái)的話,這樣是不太好的,我在linux上試過(guò),每次程序退出,我設(shè)定的值都沒(méi)有了,因?yàn)閘inux下面沒(méi)有像windows一樣的注冊(cè)表,不知道linux下SUN是怎么實(shí)現(xiàn)的,為了可移植性,最好還是用java.uitl.Properties這個(gè)類,根據(jù)一個(gè)文本映射文件來(lái)進(jìn)行值的操作,不過(guò)它也有不好的地方,它只能存入String對(duì)象,像byte[]就存不了了,如果要存的東西太復(fù)雜的話,干脆直接用數(shù)據(jù)庫(kù)吧.:)
盡管千里冰封
依然擁有晴空
你我共同品味JAVA的濃香.