千里冰封
JAVA 浓香四溢
posts - 151,comments - 2801,trackbacks - 0

在我们写程序的时候,有时会要求保存一些数据,比如用户名或者别的,但是这样数据又不是保存在程序同一目录下,这样做太明显了,也不太安全,那怎么办呢?这个时候,如果能把数据保存到注册表里面去,那该多好,一来隐蔽,二来方便,不至于在程序目录下生成一大片文件.
在JAVA里面,可以利用java.util.prefs.Preferences来对注册表进行操作,我们先看一下例子吧

/*
 * 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));
        
    }
}

这是一个最简单的例子,第一句就是根据包得到一个节点,然后把一些值放进去,可以放String,boolean,int,long,float,double等值 ,如果你想存入对象的话,可以把对象序列化成byte[],然后再存进来,然后读也是一样的,我们这样操作就像是在操作一个Map一个,所有的值都是存在这个映射里面.

那么它们保存在哪里呢?

如果选的是systemNode...则保存在[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs]

如果选的是userNode....   则保存在[HKEY_CURRENT_USER\Software\JavaSoft\Prefs]
的子节点下面


不过话又说回来,如果我们想程序跨平台的话,这样是不太好的,我在linux上试过,每次程序退出,我设定的值都没有了,因为linux下面没有像windows一样的注册表,不知道linux下SUN是怎么实现的,为了可移植性,最好还是用java.uitl.Properties这个类,根据一个文本映射文件来进行值的操作,不过它也有不好的地方,它只能存入String对象,像byte[]就存不了了,如果要存的东西太复杂的话,干脆直接用数据库吧.:)


尽管千里冰封
依然拥有晴空

你我共同品味JAVA的浓香.
posted on 2007-09-20 19:15 千里冰封 阅读(5212) 评论(12)  编辑  收藏 所属分类: JAVASE

FeedBack:
# re: JAVA操作windows注册表
2007-09-20 21:39 | teasp
good.  回复  更多评论
  
# re: JAVA操作windows注册表
2007-09-21 08:10 | Pande
java.util.prefs.Preferences是跨平台的,linux下保存在home目录下的一个文件里  回复  更多评论
  
# re: JAVA操作windows注册表
2007-09-21 09:13 | 千里冰封
我在ubuntu下面试了,确实是保存不了,我每次都读不到  回复  更多评论
  
# re: JAVA操作windows注册表
2007-09-21 10:28 | 辛科
这保存在注册表的哪个地方了???  回复  更多评论
  
# re: JAVA操作windows注册表
2007-09-21 10:32 | 千里冰封
@辛科
如果选的是systemNode...则保存在[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs]

如果选的是userNode....则保存在
[HKEY_CURRENT_USER\Software\JavaSoft\Prefs]
的子节点下面  回复  更多评论
  
# re: JAVA操作windows注册表
2007-09-21 11:51 | 蒋家狂潮
新鲜,收藏了  回复  更多评论
  
# re: JAVA操作windows注册表
2007-09-23 11:26 | jht
呵呵,挺意思  回复  更多评论
  
# re: JAVA操作windows注册表
2007-09-24 11:11 | Ming
先收藏了,用时再细看  回复  更多评论
  
# re: JAVA操作windows注册表
2007-12-28 15:23 | d
sddsdddd  回复  更多评论
  
# re: JAVA操作windows注册表
2008-05-09 19:26 | heavens
觉得用jni更好些,java自带的prefs包太受局限了  回复  更多评论
  
# re: JAVA操作windows注册表
2008-12-03 23:20 | mykoma
这是第二次来到您的博客...

只能说:很厉害  回复  更多评论
  
# re: JAVA操作windows注册表
2008-12-03 23:21 | mykoma
希望您能够加点注释..那样看着会更容易懂  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: