使用 Java 访问 Windows 注册表

使用 Java 访问 Windows 注册表(原创)

2005/5/24

使用 Java 访问 Windows 注册表
当然了, 只能运行在 Windows 下面, 可以使用开源的组件(很小, 大概40KB), JRegistryKey released under LGPL at http://www.sf.net/projects/jregistrykey. 这个包内部应该是调用jni完成的(采用jndi也可以访问windows注册表,但是提供访问注册表的具体服务程序,即完成jndi的spi的那部分也应该是采用jni完成的)。

下面是例子:

import ca.beq.util.win32.registry.*;

import java.util.*;

public class RegTest
{

 public RegTest()
    {
     RegistryKey r = new RegistryKey(RootKey.HKEY_LOCAL_MACHINE, "SOFTWARE//Microsoft//Windows//CurrentVersion//Explorer//Shell Folders");

  System.out.println(r);

  if(r.hasValue("Common Desktop")) {
     RegistryValue v = r.getValue("Common Desktop");
     System.out.println("Common Desktop = " + v.getStringValue());
  }

//  if(r.hasValues()) {
//     Iterator i = r.values();
//     while(i.hasNext()) {
//        RegistryValue v = (RegistryValue)i.next();
//        System.out.println(v.toString());
//     } // while
//  } // if
 }

 public static void main(String[] args)
    {
  RegTest regtest = new RegTest();
 }

}

这个程序可以读出来用户桌面所在的位置. 其实还有其他的用途, 例如 CLASSPATH 的设置一直都是让用户打开我得电脑 -> 属性云云, 很麻烦, 可以直接写程序来设置, 如下所示:

import ca.beq.util.win32.registry.*;
import java.io.*;

/**
 * Using JRegistryKey released under LGPL at http://www.sf.net/projects/jregistrykey
 * to access Windows registry to setup system variables on Win2K, WinXP platform.
 * DO NOT RUN THIS PROGRAM OTHERTHAN WINDOWS!
 *
 * Two variables need to be modified:
 * 1. CLASSPATH
 * 2. PATH
 *
 * @author BeanSoft
 * @version 0.1
 *
 */
public class Win32SystemVariableSetup
{

 public Win32SystemVariableSetup()
    {
  String logText = "";

  RegistryKey envReg = new RegistryKey(
   RootKey.HKEY_CURRENT_USER, "Environment");

  if(envReg.hasValue("CLASSPATH_BACKUP")) {
           logText += "It looks that classpath has been setted, not need to setup again!/n";
  }
  else {
   String originalClasspath = "";
   if(envReg.hasValue("CLASSPATH")) {
    originalClasspath = envReg.getValue("CLASSPATH").getStringValue();
    logText += "The original CLASSPATH is:" +
     originalClasspath + "/n";
    logText += "Now save it to a copy called CLASSPATH_BACKUP/n";

 //   RegistryKey backClasspathKey = new RegistryKey("CLASSPATH_BACKUP");
    RegistryValue backValue= new RegistryValue("CLASSPATH_BACKUP", originalClasspath);
 //   backClasspathKey.setValue(
             envReg.setValue(backValue);
   }

   // Setup new classpath
   String jmfClassPath = ".//lib;.//lib//customizer.jar;.//lib//jmf.jar;.//lib//sound.jar;.//lib//mediaplayer.jar;.//lib//multiplayer.jar;.;";
   String beanChatClassPath = ".//classes;.//lib//OfficeLnFs.jar;.//lib//xplookandfeel.jar;.//lib//hsqldb.jar;.//lib//jdbc_conn_pool.jar;";
   String newClassPathToSet = beanChatClassPath + jmfClassPath + originalClasspath;

         RegistryValue newClasspathValue = new RegistryValue("CLASSPATH", newClassPathToSet);
         logText += "New class path need to be setted:/n" + newClassPathToSet + "/n";
         envReg.setValue(newClasspathValue);
  }

  if(envReg.hasValue("PATH_BACKUP")) {
           logText += "It looks that path has been setted, not need to setup again!/n";
  }
  else {
   String originalPath = "";
   if(envReg.hasValue("PATH")) {
    originalPath = envReg.getValue("PATH").getStringValue();
    logText += "The original PATH is:" +
     originalPath + "/n";
    logText += "Now save it to a copy called PATH_BACKUP/n";

 //   RegistryKey backClasspathKey = new RegistryKey("CLASSPATH_BACKUP");
    RegistryValue backValue= new RegistryValue("PATH_BACKUP", originalPath);
 //   backClasspathKey.setValue(
             envReg.setValue(backValue);
   }

   // Setup new classpath
   String jmfPath = ".//lib;.//JMF_win32//lib;.;";
   String newPathToSet = jmfPath + originalPath;

         RegistryValue newPathValue = new RegistryValue("PATH", newPathToSet);
         logText += "New path need to be setted:/n" + newPathToSet + "/n";
         envReg.setValue(newPathValue);
  }

  logText += "To make affect of the registry work, please log off and log on again or just reboot your computer.";
        javax.swing.JOptionPane.showMessageDialog(null, new java.awt.TextArea(
   logText));
        System.exit(0);
 }

 public static void main(String[] args)
    {
  Win32SystemVariableSetup win32systemvariablesetup = new Win32SystemVariableSetup();
 }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值