2015-03-31 34 views
1

我試圖寫在註冊表中的以下路徑中的註冊表鍵訪問HKEY_CURRENT_USER:通過預置在Java中

HKEY_CURRENT_USER - >軟件 - > TestApp

我目前做的:

public static void main(String[] args) 
{ 

    Preferences p = Preferences.userRoot().node("/HKEY_CURRENT_USER/Software/TestApp"); 
    p.put("TestKey", "TestValue"); 
} 

但它寫在HKEY_CURRENT_USER-> Software-> JavaSoft-> Prefs->/H/K/E/Y_/C/U/R/R/E/N/T/_/U/S/E/R - >軟件 - >測試/應用程序

我該如何得到它遵循絕對路徑,爲什麼它會在額外的斜槓?

回答

1

你可以看看這個美麗的博客帖子大約Read/Write the registry

我可以請你注意這一段代碼:

/** 
    * Write a value in a given key/value name 
    * @param hkey 
    * @param key 
    * @param valueName 
    * @param value 
    * @throws IllegalArgumentException 
    * @throws IllegalAccessException 
    * @throws InvocationTargetException 
    */ 
    public static void writeStringValue 
    (int hkey, String key, String valueName, String value) 
    throws IllegalArgumentException, IllegalAccessException, 
    InvocationTargetException 
    { 
    if (hkey == HKEY_LOCAL_MACHINE) { 
     writeStringValue(systemRoot, hkey, key, valueName, value); 
    } 
    else if (hkey == HKEY_CURRENT_USER) { 
     writeStringValue(userRoot, hkey, key, valueName, value); 
    } 
    else { 
     throw new IllegalArgumentException("hkey=" + hkey); 
    } 
    } 

我認爲這個解決方案是很優雅在onder上管理針對註冊表的讀/寫操作。

0

我如何得到它遵循的絕對路徑

您可以使用反射來訪問java.util.prefs.Preferences中的類的私有方法。有關詳細信息,請參閱此答案:https://stackoverflow.com/a/6163701/6256127

但是,我不建議使用此方法,因爲它可能隨時中斷。

爲什麼它會在額外的斜線?

看一看這個答案:https://stackoverflow.com/a/23632932/6256127

註冊表的鍵是保留大小寫,但不區分大小寫。例如,如果您有密鑰「Rbi」,則無法再創建另一個名爲「RBi」的密鑰。案件被保存但被忽略。 Sun的案例敏感解決方案是爲密鑰添加斜槓。