java如何操作注册表(Preferences类)(在windows的注册表中保存、读取)
我们经常需要将我们的程序运行中的一些信息(比如在选项对话框中的设置)记录下来,以做便再次运行的时候不用再重写填写这些数据。这对改善软件的人机可用性方面是很有用的。比如:数据库监控、日志工具,JDBMonitor在这方面做的是非常好的,以它的Swing界面监视器和数据库日志记录查询窗口中所有的配置信息(例如远程服务器地址、端口、数据库名称、JDBC驱动等等)都是被保存的,当再次运行的时候程序会自动加载这些配置信息,所以使用起来相当方便。
保存加载配置文件有多种方式,比如xml文件、properties文件等,采用这些保存方式的一个问题就是如果程序是以jar,war 包等方式发布的那么这些配置文件就不能放在包中,因为包中的文件是不能在运行时改动的,只能放在磁盘的文件中,但是放在磁盘的文件中又很容易出现因为操作系统的差异、权限等问题造成程序的问题。
JDK1.4中提供了Preferences类,在java.util.prefs包里面。Preferences类在不同的平台中有不同的实现方式。比如在Windows平台中,Preferences是将数据保存在注册表中的。
为了区分不同的应用程序的参数项,在建立Preferences时要指定一个节点路径。
Preferences是一个抽象类,提供了一系列静态方法和抽象方法来操作参数项:
Preferences userData = Preferences.userNodeForPackage(this); //得到用户配置节点
Preferences sysData = Preferences.systemNodeForPackage(this); //得到系统配置节点。
比如在windows中Preferences.userNodeForPackage代表得到 HKEY_CURRENT_USER\Software\JavaSoft\Prefs下的相对路径
Preferences.systemNodeForPackage代表得到 HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs下的相对路径
(你可以通过regedit命令查看注册表)
Preferences的读取、存储是非常容易的,存储只要调用put***方法就可以,读取调用get***即可,不同的put,get方法分别用于存取不同的数据类型,详细信息可以参考JavaDoc。
以JDBMonitor的Swing界面监视器的连接对话框为例为大家分析,打开com.cownew.JDBMonitor.listenerImpl.sckListenerClient.ConnectConfigDialog,saveConfig()和loadConfig()分别就是保存和读取参数用了,这两个方法会在超类中被调用。可以看到代码实现非常简单:
protected void saveConfig()
{
Preferences prefer = Preferences.userNodeForPackage(getClass());
prefer.put(HOST_NAME,getHostName());
prefer.putInt(PORT,getPort());
}
protected void loadConfig()
{
Preferences prefer = Preferences.userNodeForPackage(getClass());
setHostName(prefer.get(HOST_NAME,""));
setPort(prefer.getInt(PORT,9527));
}
java如何操作注册表(Preferences类)(在windows的注册表中保存、读取)的更多相关文章
- java之操作集合的工具类--Collections
Collections是一个操作Set.List和Map等集合的工具类. Collections中提供了大量方法对集合元素进行排序.查询和修改等操作,还提供了对集合对象设置不可变.对集合对象实现同步控 ...
- java:redis(java代码操作redis,实体类mapper生成器(generator))
1.redis_demo Maven ItemMapper.xml: <?xml version="1.0" encoding="UTF-8" ?> ...
- 将Java连接数据库操作封装到MySQL类中
public class MySQL { final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver"; final String D ...
- 入侵检测中需要监控的注册表路径研究(Windows Registry Security Check)
1. Windows注册表简介 注册表(Registry,繁体中文版Windows称之为登录档)是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息.早在Wind ...
- c#中@标志的作用 C#通过序列化实现深表复制 细说并发编程-TPL 大数据量下DataTable To List效率对比 【转载】C#工具类:实现文件操作File的工具类 异步多线程 Async .net 多线程 Thread ThreadPool Task .Net 反射学习
c#中@标志的作用 参考微软官方文档-特殊字符@,地址 https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/toke ...
- Java网络编程和NIO详解7:浅谈 Linux 中NIO Selector 的实现原理
Java网络编程和NIO详解7:浅谈 Linux 中NIO Selector 的实现原理 转自:https://www.jianshu.com/p/2b71ea919d49 本系列文章首发于我的个人博 ...
- windows下注册表的操作
原博:https://blog.csdn.net/denghubu/article/details/5765921 1. 注册表简介 注册表是为Windows NT和Windows95中所 ...
- -1-4 java io java流 常用流 分类 File类 文件 字节流 字符流 缓冲流 内存操作流 合并序列流
File类 •文件和目录路径名的抽象表示形式 构造方法 •public File(String pathname) •public File(String parent,Stringchild) ...
- 最全的Java操作Redis的工具类,使用StringRedisTemplate实现,封装了对Redis五种基本类型的各种操作!
转载自:https://github.com/whvcse/RedisUtil 代码 ProtoStuffSerializerUtil.java import java.io.ByteArrayInp ...
随机推荐
- php设计模式之Proxy(代理模式)和Facade(外观)设计模式
Proxy(代理模式)和Facade(外观)设计模式它们均为更复杂的功能提供抽象化的概念,但这两种实现抽象化的过程大不相同 Proxy案例中,所有的方法和成员变量都来自于目标对象,必要时,该代理能够对 ...
- 重拾C,一天一点点_11
命令行参数 在支持C语言的环境中,可以在程序开始执行时将命令行参数传递给程序. 调用主函数main时,它带有两个参数,第一个参数(argc,用于参数计数)的值表示运行程序时命令行参数的数目:第二个参数 ...
- 发短信的主要代码(SmsManger)
SmsManager smsManager=SmsManager.getDefault(); smsManager.sendTextMessage(number,null,sms, null,null ...
- ElasticSearch.js
ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Apach ...
- Redux介绍及基本应用
一.Redux介绍 Redux的设计思想很简单,就两句话: Web应用是一个状态机,神力与状态是一一对应的 所有的状态,保存在一个对象里面 二.Redux基本概念和API Store Store就是 ...
- rails bug
variable @fontAwesomeEotPath_iefix is undefined rails generate bootstrap:install如果还有错,保证在加载主提之前impor ...
- GNU make 规则
clean : rm *.tmp 规则格式: targets : prerequisites recipe ... targets : prerequisites : recipe recipe .. ...
- SQLserver使用映射表进行数据相关操作
基本需求: 老数据有老数据的顺序编码规则,新数据有新数据的顺序编码规则,但是老数据的编码还是要更新相应的东西,新数据也得实时更新,在新数据中已经用新编码规则对老数据对进行编码,在上报表中既要新增新数据 ...
- flask-cors 实现跨域请求
安装:pip install -U flask-cors from flask import Flask from flask.ext.cors import CORS app = Flask(__n ...
- Android开发初始
由于本人一直的主攻方向是.NET平台,所以移动开发方面主要是Windows Phone平台,但是确实Windows Phone的市场占有率太小了,在加上本人是个技术迷,希望尝试新的东西,所以Andro ...