我们接下来就来分析一下JDBMonitor是如何实现的。JDBMonitor的二进制jar包和源代码都可以从 http://www.cownew.com 下载得到。
保存加载配置文件有多种方式,比如xml文件、properties文件等,采用这些保存方式的一个问题就是如果程序是以jar,war 包等方式发布的那么这些配置文件就不能放在包中,因为包中的文件是不能在运行时改动的,只能放在磁盘的文件中,但是放在磁盘的文件中又很容易出现因为操作系统的差异、权限等问题造成程序的问题。JDBMonitor采用的则是JDK中的Preferences类来避免这些问题。
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下的相对路径
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));
}