Работа с реестром Windows с использованием java.util.prefs.Preferences - PullRequest
1 голос
/ 31 марта 2010

У меня есть несколько вопросов по поводу реестра.
У нас есть

Preferences p = Preferences.userRoot();

Если мы выполним

p.nodeExists("/HKEY_CURRENT_USER/Software/Policies/Microsoft")    

вернет истину.
После этого:

p = p.node("/HKEY_CURRENT_USER/Software/Policies");    
for(String s : p.childrenNames()){
    System.out.println(">" + s);
}

Мы видим, что у него есть один дочерний элемент: "Windows". Но

p.nodeExists("/HKEY_CURRENT_USER/Software/Policies/Microsoft/Windows")

возвращает false. Почему?

Спасибо.

UPDATE

Ok. У меня есть некоторые ошибки. Позвольте мне попробовать еще раз: почему

p.nodeExists("/HKEY_CURRENT_USER/Software/Policies/Microsoft/Windows") 

вернуть ложь?

Ответы [ 2 ]

3 голосов
/ 31 марта 2010

Если вы выполняете строки кода, показанные в указанном порядке, когда вы попадаете на строку

p.nodeExists("/HKEY_CURRENT_USER/Software/Policies/Microsoft/Windows")

p больше не указывает на пользователя root, а на "/HKEY_CURRENT_USER/Software/Policies".

Кстати, у вас есть вероятное упущение в вашем третьем примере кода:

p = p.node("/HKEY_CURRENT_USER/Software/Policies");    

должно быть

p = p.node("/HKEY_CURRENT_USER/Software/Policies/Microsoft");    
0 голосов
/ 19 сентября 2015

Я наткнулся на это сегодня. Ответ, который вы приняли, совершенно неправильный.

У вас сложилось впечатление, что Java Preferences - это общий инструмент для работы с реестром Windows. Это не. Так уж получилось, что стандартная реализация Preferences на платформе Windows хранит свои данные в реестре Windows.

Реализация в Windows хранит вещи под следующими путями реестра:

Для systemRoot: HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs

Для пользователя Root: HKEY_CURRENT_USER\Software\JavaSoft\Prefs

(примечание: пути реестра немного изменяются, если вы используете 32-битную JRE на 64-битной ОС, но это не имеет ничего общего с Java и всем, что связано с Windows. Код Sun всегда использует вышеуказанные пути.)

Смысл в том, что вы можете, возможно, использовать интерфейс Java Preferences для чтения или изменения значений в реестре Windows, но только ниже вышеупомянутых путей реестра. Причина, по которой я говорю «Может быть» в том, что это именно так, как это происходит в данный момент. Sun / Oracle может в любой момент принять решение не использовать реестр Windows или реестр Windows, но без использования подузлов, то есть хранить все в одной большой XML-строке или чем-то еще. Дело в том, что настройки Java предназначены для того, чтобы оградить вас от этого.

Многие программы Java, использующие настройки Java, предоставляют собственную реализацию (что довольно просто), чтобы избежать реализации Sun по умолчанию, которая использует реестр Windows. В наши дни не каждый может писать в реестр Windows, так что это было довольно неудачное дизайнерское решение со стороны Sun. К счастью, очень легко изменить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...