java 訪問註冊表資訊 之是'ICE_JNIRegistry.DLL'和'registry.jar'
首先先到網上下載一下是ICE_JNIRegistry.DLL和registry.jar這兩個檔案,下載之後將ICE_JNIRegistry.DLL放到tomcat的bin目錄下,把registry.jar放到項目的lib目錄下,(不過網上有見到過說要把2個檔案都要放到lib 和bin下面,我百思不得其解)
如果要讀取某個服務的安裝路徑可以到註冊表的以下目錄中讀取:
HKEY_LOCAL_MACHINE->SOFTWARE->MICROSOFT->WINDOWS-CURRENTVERSION->APP PATHS
然後找到你要找的服務如360safe.exe 其path 描述的就是其安裝路徑,我之前的需求就是知道一個服務名來擷取其安裝路徑,對於其他方面的需求還沒有瞭解過。那麼在JAVA中只要2行簡單的代碼調用就可以完成了,比如我要讀取360safe的安裝路徑,其代碼如下:
RegistryKey software = Registry.HKEY_LOCAL_MACHINE. openSubKey("SOFTWARE");
RegistryKey subKey = software.openSubKey("Microsoft").openSubKey("Windows").openSubKey("CurrentVersion").openSubKey("App Paths").openSubKey("360safe.exe");
路徑=subKey.getStringValue("")
但是在實際應用中,會遇到路徑是中文的情況,對於路徑有中文的情況下,我們就要先轉一下編碼,不然會出現中文亂碼的問題。
可以通過下面的方法來完成轉碼:
private static String enCodeVal(String val)
{
try
{
byte[] buf = val.getBytes("UNICODE");
ByteToCharConverter converter = ByteToCharConverter.getConverter("ISO-8859-1");
char c[] = converter.convertAll(buf);
int i,j;
char[] ch = new char[c.length/2+1];
for (i = 2,j = 0; i < c.length; i++) { //提取有用的字元到新的數組
if(i%2 == 0)
{
ch[j++] = c[i];
}
}
byte[] tmpBuf = new byte[j];
for(i = 0;i < j;i++)
{
tmpBuf[i] = (byte)ch[i];
}
converter = ByteToCharConverter.getConverter("GB2312");
char gbc[] = converter.convertAll(tmpBuf);
return new String(gbc);
}
catch(Exception e)
{
System.out.println(e.getMessage());
return null;
}
}