Atitit.操作注冊表 樹形數據庫 注冊表的歷史 java版本類庫總結

Atitit.操作注冊表?樹形數據庫?注冊表的歷史?java版本類庫總結

?

1.?注冊表是樹形數據庫 1

2.?注冊表的由來 1

3.?Java??操作注冊表 2

3.1.?使用Preferences?API?(限定訪問路徑了) 2

3.2.?使用JNI 3

3.3.?Jregistrykey?推薦 4

3.4.?Jregistry 4

4.?org.openqa.selenium.os.WindowsUtils 4

4.1.?以及進程管理 4

?

1.?注冊表是樹形數據庫

樹形數據庫,但不提供類似SQL的查詢接口

?

?

2.?注冊表的由來

在Windows?3.x操作系統中,注冊表是一個極小文件,其文件名為Reg.dat,里面只存放了某些文件類型的

注冊表所設定的默認打開方式

應?用程序關聯,大部分的設置放在Win.ini、System.ini等多個初始化INI文件中。由于這些初始化文件不便于管理和維護,時常出現一些因?INI文件遭到破壞而導致系統無法啟動的問題。為了使系統運行得更為穩定、健壯,Windows?95/98設計師們借用了Windows?NT中的注冊表的思想,將注冊表引入到Windows?95/98操作系統中,而且將INI文件中的大部分設置也移植到注冊表中,因此,注冊表在Windows?95/98操作系統的啟動、運行過程中起著重要的作用。

?

作者::?老哇的爪子?Attilax?艾龍,??EMAIL:1466519819@qq.com

轉載請注明來源:?http://blog.csdn.net/attilax

?

3.?Java??操作注冊表

3.1.?使用Preferences?API?(限定訪問路徑了)

由于java程序是“write?once,?run?everywhere”,用java讀寫注冊表,那程序的跨平臺性就差了。java對注冊表的操作,在jdk1.4以前的版本中,那是不可能的,只能用?JNI來實現;然而jdk1.4之后提供的prefs包可以操作windows注冊表,不過定死了root只在SOFTWARE/JavaSoft?/prefs下,估計也是出于這種兩難吧,又要保證所謂平臺無關,還要照顧大家對windows的依賴

。而?JDK?提供操作?Windows?的?API?也就是?Preferences,因為這個?API?也是跨平臺的,所功能比較弱,在?Win32?下只能用來操作?HKCU\Software\JavaSoft?和?HKLM\Software\JavaSoft?下及子節點的數據。

自由訪問注冊表其他鍵的值光用?Java?是做不到的,必然方案就是?JNI

?

Preferences?API并不是為訪問Windows注冊表而設計的,這是值得指出的一點。

我們之所以會有上面的誤解是由于SunWindows版本的JDK在實現Preferences?API時使用了Windows注冊表作為存儲庫,即我們用Preferences?API存儲的數據會保存到Windows注冊表中,這樣Preferenes?API也就有了訪問Windows注冊表的能力。但是換到其它的平臺或其它廠商的JDK實現又會怎么樣呢?這個問題是和Preferences?API的實現相關的,我們沒有辦法回答。?

如果程序不關心存儲庫的細節,只是要找一個存放數據的地方,那么Preferences?API很合適。

Preferences?API也是有局限的,請您考慮兩個問題:?

·?一個Java軟件,這次我在SunJDK上運行并使用Preferences?API保存了我的個人喜好,下次我在IBMJDK上運行,這時我的個人喜好還可以通過Preferences?API得到嗎?可能可以也可能不可以,這時的行為是由SunIBMPreferences?API實現決定的。(在相同的JDK實現上可以使用Preferences?API來在不同的程序間共享數據)?

·?一個Java軟件需要讓用戶設置是否和操作系統一起啟動,類似的需求還很多。這類需求就是要求Java程序有真正的和相關操作系統協同的能力。這種能力不是Preferences?API的設計目標。?

java讀寫注冊表需要用到兩種方式:
1.?java.util.prefs.*?中的包
???其中?Preferences.systemRoot()?得到的是?HKEY_LOCAL_MACHINE/Software/JavaSoft/prefs?可以在此位置之下方便的進行注冊表的????????讀寫
???Preferences.userRoot()?得到的是?HKEY_LOCAL_USER/Software/JavaSoft/prefs,可以在此位置下進行注冊表

但是對其他
???位置操作就不方便。
???示例代碼:
???import?java.util.prefs.*;???
???public?class?Registery?{???
?????String[]?keys?=?{"aaa",?"bbb",?"ccc"};???
?????String[]?values?=?{"1",?"2",?"3"};???
?????//把相應的值儲存到變量中去???
????public?void?writeValue()?{???
?????//?HKEY_LOCAL_MACHINE/Software/JavaSoft/prefs下寫入注冊表值.???
????????Preferences?pre?=?Preferences.systemRoot().node("/javaplayer");???
????????for?(int?i?=?0;?i?<?keys.length;?i++)?{???
????????????pre.put(keys,?values);???
????????}???
????}???
????public?static?void?main(String[]?args)?{???
????????Registery?reg?=?new?Registery();???
????????reg.writeValue();???
????}???
??}??
??執行代碼的結果會在?HKEY_LOCAL_MACHINE/Software/JavaSoft/prefs/javaplayer?位置插入三個鍵值

3.2.?使用JNI

Windows操作系統提供了操作注冊表的API,因此用JNIJava和這些API連接起來我們就獲得了用Java操作注冊表的能力。這說起來有些簡單,實現起來卻需要處理大量的細節。幸運的是這樣的工作已經有人做了,我們要感謝他們。下面我們就來看看其中的一個包。

com.ice.jni.registry包是通過JNI(Java?native?interface)實現的Windows注冊表操作API,可以用來訪問、修改和導出Windows注冊表。現在這個包已經公開了,可以放心的使用而不?必擔心license的問題,并且包括一個構建好的DLLJavaC的源代碼。它可以在Java?1.1和更高的版本上工作。?

?

2.?開源讀寫注冊表的庫?registry-3.1.3?主頁地址:http://www.trustice.com/java/jnireg/index.shtml
???下載后需要將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.?以及進程管理

?

?

? public?static?void?main(String[]?args)?throws?Exception?{

Line?50:? public?static?void?traceWith(Logger?log)?{

Line?54:? public?static?void?killByName(String?name)?{

Line?58:? public?static?void?tryToKillByName(String?name)?{

Line?68:? public?static?void?kill(String[]?cmdarray)?throws?Exception?{

Line?126:? private?static?void?killPID(String?processID)?{

Line?131:? public?static?Map<String,?String>?procMap()?throws?Exception?{

Line?171:? public?static?synchronized?Properties?loadEnvironment()?{

Line?182:? public?static?String?getProgramFilesPath()?{

Line?186:? public?static?String?getProgramFiles86Path()?{

Line?190:? private?static?String?getEnvVarPath(String?envVar,?String?defaultValue)?{

Line?201:? public?static?ImmutableList<String>?getPathsInProgramFiles(String?childPath)?{

Line?207:? private?static?String?getFullPath(String?parent,?String?child)?{

Line?211:? public?static?String?getLocalAppDataPath()?{

Line?220:? public?static?String?getEnvVarIgnoreCase(String?var)?{

Line?230:? public?static?File?findSystemRoot()?{

Line?250:? public?static?String?findWMIC()?{

Line?267:? public?static?File?findWBEM()?{

Line?280:? public?static?String?findTaskKill()?{

Line?295:? public?static?String?findReg()?{

Line?319:? public?static?boolean?isRegExeVersion1()?{

Line?330:? public?static?Class<?>?discoverRegistryKeyType(String?key)?{

Line?358:? public?static?String?readStringRegistryValue(String?key)?{

Line?384:? public?static?int?readIntRegistryValue(String?key)?{

Line?418:? public?static?boolean?readBooleanRegistryValue(String?key)?{

Line?431:? public?static?boolean?doesRegistryValueExist(String?key)?{

Line?452:? public?static?void?writeStringRegistryValue(String?key,?String?data)

Line?477:? private?static?String?executeCommand(String?commandName,?String[]?args)?{

Line?489:? public?static?void?writeIntRegistryValue(String?key,?int?data)?{

Line?517:? public?static?void?writeBooleanRegistryValue(String?key,?boolean?data)?{

Line?521:? public?static?void?deleteRegistryValue(String?key)?{

Line?540:? private?static?String?runRegQuery(String?key)?{

Line?556:? public?static?boolean?thisIsWindows()?{

Line?560:? private?static?class?RegKeyValue?{

?

?

參考

Atitit.各種??數據類型?(?樹形結構,??)?的結構與存儲數據庫?attilax??總結.doc

?

轉載于:https://www.cnblogs.com/attilax/p/5963697.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/273289.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/273289.shtml
英文地址,請注明出處:http://en.pswp.cn/news/273289.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C# xml文件讀取與修改

c#讀寫xml文件已知有一個XML文件&#xff08;bookstore.xml&#xff09;如下&#xff1a; Code<?xml version"1.0" encoding"gb2312"?><bookstore> <book genre"fantasy" ISBN"2-3631-4"> <title>Obero…

外連接從表過濾

1、使用left join時從表的過濾 WITH a AS( SELECT A aid FROM dual UNION ALL SELECT B FROM dual UNION ALL SELECT C FROM dual UNION ALL SELECT D FROM dual UNION ALL SELECT E FROM dual ), b AS( SELECT A aid,10 num,1 type FROM dual UNION ALL SELECT B,20,2 FROM d…

php pcntl 多進程學習

1、捕獲子進程退出&#xff08;監聽SIGCHLD信號&#xff0c;然后調用 pcntl_wait 函數&#xff09; declare(ticks1);pcntl_signal(SIGCHLD, "sig_handler"); function sig_handler($signo) {switch ($signo) {case SIGCHLD:$status 0;$child_id pcntl_wait($statu…

Oracle取最大/最小值函數

SELECT greatest(DATE2020-01-01,DATE2020-01-03,DATE2020-01-05,DATE2020-01-07,DATE2020-01-09) 最大值, least(1,3,5,7,9) 最小值 FROM dual; SELECT 1 FROM dual WHERE greatest(1,3,5,7,9) > 8;

ORACLE將查詢字段指定為某種類型

SELECT CAST(張三 AS VARCHAR2(20)) name FROM dual; 一般來說在查詢時很少有用到這種語句&#xff0c;但是使用CREATE TABLE ... AS SELECT ...語句的時候這個就很好用了 --建表 CREATE TABLE test01 AS SELECT 張三 name FROM dual; --正常插入數據 INSERT INTO test01 SEL…

Less Css 教程

http://www.w3cplus.com/css/less&#xff0c;這個東西太吊了&#xff01;轉載于:https://www.cnblogs.com/wln3344/p/4479014.html

分組查詢最晚一條數據(ORACLE)

現有客戶表&#xff0c;交費表&#xff0c;需查詢每個存在交費記錄客戶的最后一筆交費信息 這里提供兩種方式 注&#xff1a;客戶不會在同一時間有兩條交費&#xff0c;SQL可直接執行 --查詢客戶名稱&#xff0c;最后一筆交費時間&#xff0c;以及最后一筆交費金額 WITH --客…

ORACLE循環中使用序列

在批量生成數據時&#xff0c;經常會用到序列的Nextval&#xff0c;今天碰到了這樣的情況&#xff0c;日常記錄&#xff0c;下附解決方案。先看這段腳本 DECLARE i INTEGER; BEGINFOR cur IN 1..5 LOOPi : DomainObjectId.Nextval;dbms_output.put_line(i);END LOOP; END; 編…

常用的機器學習數據挖掘知識點【轉】

轉自&#xff1a; 【基礎】常用的機器學習&數據挖掘知識點 Basis(基礎)&#xff1a; MSE(Mean Square Error 均方誤差)&#xff0c;LMS(LeastMean Square 最小均方)&#xff0c;LSM(Least Square Methods 最小二乘法)&#xff0c;MLE(MaximumLikelihood Estimation最大似然…

tomcat運行問題解決方法

早上過來遇到一個非常奇怪的問題&#xff0c;運行一個新的項目&#xff0c;運行環境都沒問題&#xff0c;可是在調試的時候&#xff0c;總是出錯。 錯誤代碼&#xff1a; log4j:WARN No appenders could be found for logger log4j:WARN Please initialize the log4j system p…

團隊開發——沖刺1.d

沖刺階段一&#xff08;第四天&#xff09; 1、昨天做了什么&#xff1f; 完成部分界面設置&#xff0c;補充三層難度界面、游戲結束界面。 2、今天準備做什么&#xff1f; 優化界面細節。查看C#資料&#xff0c;再解決自己電腦的問題。 3、遇到什么困難&#xff1f; 已經固定好…

10. javacript高級程序設計-DOM

1. DOM DOM(文檔對象模型)是針對HTML和XML文檔的一個API&#xff08;應用程序接口&#xff09; 1.1 節點層次 DOM可以將任何HTML和XML文檔描繪成一個由多層節點構成的結構。節點分為幾種不同的類型&#xff0c;每種類型分別表示文檔中不同的信息及標記。 1.1.1 Node類型 DOM1中…

hdu 5045 Contest(狀態壓縮DP)

題解&#xff1a;我們使用一個二位數組dp[i][j]記錄進行到第i個任務時&#xff0c;人組合為j時的最大和&#xff08;這里的j我們用二進制的每位相應一個人&#xff09;。 詳細見代碼&#xff1a; #include <iostream> #include <cstdio> #include <cstring> …

mysql001創建數據庫

-- 注釋&#xff0c;ctrl/ -- 查詢所有數據庫&#xff1b; show DATABASES; -- 創建數據庫; CREATE DATABASE studb; -- 切換數據庫; USE studb; -- 刪除數據庫 DROP DATABASE studb;

mysql002創建表

-- 創建student表 DDL CREATE TABLE stdent( sno int(3), name VARCHAR(55), sex CHAR(2), age int, dtdate date, classname VARCHAR(55), email VARCHAR(55) ) -- 查詢表中數據 DQL SELECT * FROM stdent;

oc基礎-self關鍵字的使用

#import <Foundation/Foundation.h>interface Student : NSObject {int _age;char *_name; } - (void) study; - (void) run; (void) play;(void) run; endimplementation Student - (void) study {NSLog("%s在學習",self->_name);[self run];//若在此調用…

mysql003操作表DDL

-- 查詢表中數據 DQL 注意在mydb數據庫下面 SELECT * FROM stdent; -- 在表中添加一列 DDL -- 新增列 默認添加到最后 ALTER TABLE stdent add score DOUBLE(4,1); -- 新增一列 在表中開頭添加 ALTER TABLE stdent add score2 double(5,1) first; -- 在指定列后面添…

Google Guava學習筆記——基礎工具類Joiner的使用

Guava 中有一些基礎的工具類&#xff0c;如下所列&#xff1a; 1&#xff0c;Joiner 類&#xff1a;根據給定的分隔符把字符串連接到一起。MapJoiner 執行相同的操作&#xff0c;但是針對 Map 的 key 和 value。 2&#xff0c;Splitter 類&#xff1a;與 Joiner 操作相反的類&a…

xampp 無法啟動mysql

Error: could not open single-table tablespace file .\test\dr.ibd 在網上搜索到的解決方案都不管用。結果整合了兩個解決方案&#xff1a; 刪掉xampp/data/ib_logfile0 xampp/data/ib_logfile1 xampp/data/ibdata1 三個文件就好了轉載于:https://www.cnblogs.com/fyydnz/p/4…

mysql005約束.列級別

-- 列級約束 -- sno 主鍵&#xff1a;唯一&#xff0c;不為空&#xff0c;自增 -- name 非空 -- sex 非空&#xff0c;默認值&#xff0c;只有男女 -- age 0-30歲 -- score 非空 -- dtdate 非空 -- classname 非空 -- email唯一 -- 創建表&#xff0c;增加列級約束 …