Atitit.
3.2.使用JNI3
1.注册表是树形数据库
树形数据库,但不提供类似SQL的查询接口
2.注册表的由来
在Windows3.x操作系统中,注册表是一个极小文件,其文件名为Reg.dat,里面只存放了某些文件类型的
注册表所设定的默认打开方式
应用程序关联,大部分的设置放在Win.ini、System.ini等多个初始化INI文件中。由于这些初始化文件不便于管理和维护,时常出现一些因INI文件遭到破坏而导致系统无法启动的问题。为了使系统运行得更为稳定、健壮,Windows95/98设计师们借用了WindowsNT中的注册表的思想,将注册表引入到Windows95/98操作系统中,而且将INI文件中的大部分设置也移植到注册表中,因此,注册表在Windows95/98操作系统的启动、运行过程中起着重要的作用。
作者::老哇的爪子Attilax艾龙,EMAIL:1466519819@qq.com
转载请注明来源:
3.Java操作注册表3.1.使用PreferencesAPI(限定访问路径了)
由于java程序是“writeonce,runeverywhere”,用java读写注册表,那程序的跨平台性就差了。java对注册表的操作,在jdk1.4以前的版本中,那是不可能的,只能用JNI来实现;然而jdk1.4之后提供的prefs包可以操作windows注册表,不过定死了root只在SOFTWARE/JavaSoft/prefs下,估计也是出于这种两难吧,又要保证所谓平台无关,还要照顾大家对windows的依赖
。而
自由访问注册表其他键的值光用
PreferencesAPI
我们之所以会有上面的误解是由于
如果程序不关心存储库的细节,只是要找一个存放数据的地方,那么PreferencesAPI很合适。
PreferencesAPI也是有局限的,,请您考虑两个问题:
·一个
·一个
java读写注册表需要用到两种方式:1.java.util.prefs.*中的包其中Preferences.systemRoot()得到的是HKEY_LOCAL_MACHINE/Software/JavaSoft/prefs可以在此位置之下方便的进行注册表的读写Preferences.userRoot()得到的是HKEY_LOCAL_USER/Software/JavaSoft/prefs,可以在此位置下进行注册表
但是对其他位置操作就不方便。示例代码:importjava.util.prefs.*;publicclassRegistery{String[]keys={"aaa","bbb","ccc"};String[]values={"1","2","3"};//把相应的值储存到变量中去publicvoidwriteValue(){//HKEY_LOCAL_MACHINE/Software/JavaSoft/prefs下写入注册表值.Preferencespre=Preferences.systemRoot().node("/javaplayer");for(inti=0;i<keys.length;i++){pre.put(keys,values);}}publicstaticvoidmain(String[]args){Registeryreg=newRegistery();reg.writeValue();}}执行代码的结果会在HKEY_LOCAL_MACHINE/Software/JavaSoft/prefs/javaplayer位置插入三个键值
3.2.使用JNI
Windows
com.ice.jni.registry
2.开源读写注册表的库registry-3.1.3主页地址:下载后需要将ICE_JNIRegistry.dll放到目前正在用的jdk的bin目录下
3.3.Jregistrykey推荐3.4.Jregistry
jRegistry通过JNI技术来访问WINDOWS注册表API。
4.org.openqa.selenium.os.WindowsUtils
writeIntRegistryValue
writeStringRegistryValue
runRegQuery
4.1.以及进程管理
publicstaticvoidmain(String[]args)throwsException{
Line50: publicstaticvoidtraceWith(Loggerlog){
Line54: publicstaticvoidkillByName(Stringname){
Line58: publicstaticvoidtryToKillByName(Stringname){
Line68: publicstaticvoidkill(String[]cmdarray)throwsException{
Line126: privatestaticvoidkillPID(StringprocessID){
Line131: publicstaticMap<String,String>procMap()throwsException{
Line171: publicstaticsynchronizedPropertiesloadEnvironment(){
Line182: publicstaticStringgetProgramFilesPath(){
Line186: publicstaticStringgetProgramFiles86Path(){
Line190: privatestaticStringgetEnvVarPath(StringenvVar,StringdefaultValue){
Line201: publicstaticImmutableList<String>getPathsInProgramFiles(StringchildPath){
Line207: privatestaticStringgetFullPath(Stringparent,Stringchild){
Line211: publicstaticStringgetLocalAppDataPath(){
Line220: publicstaticStringgetEnvVarIgnoreCase(Stringvar){
Line230: publicstaticFilefindSystemRoot(){
Line250: publicstaticStringfindWMIC(){
Line267: publicstaticFilefindWBEM(){
Line280: publicstaticStringfindTaskKill(){
Line295: publicstaticStringfindReg(){
Line319: publicstaticbooleanisRegExeVersion1(){
Line330: publicstaticClass<?>discoverRegistryKeyType(Stringkey){
Line358: publicstaticStringreadStringRegistryValue(Stringkey){
Line384: publicstaticintreadIntRegistryValue(Stringkey){
Line418: publicstaticbooleanreadBooleanRegistryValue(Stringkey){
Line431: publicstaticbooleandoesRegistryValueExist(Stringkey){
Line452: publicstaticvoidwriteStringRegistryValue(Stringkey,Stringdata)
Line477: privatestaticStringexecuteCommand(StringcommandName,String[]args){
Line489: publicstaticvoidwriteIntRegistryValue(Stringkey,intdata){
Line517: publicstaticvoidwriteBooleanRegistryValue(Stringkey,booleandata){
Line521: publicstaticvoiddeleteRegistryValue(Stringkey){
Line540: privatestaticStringrunRegQuery(Stringkey){
Line556: publicstaticbooleanthisIsWindows(){
Line560: privatestaticclassRegKeyValue{
参考
Atitit.各种数据类型(树形结构,)的结构与存储数据库attilax总结.doc
我们可以沿途用镜头记录彼此的笑脸,和属于我们的风景。