Предпочтительный подход API не предоставляет Вам доступ ко всем ответвлениям реестра. На самом деле это только предоставляет Вам доступ туда, где Предпочтительный API хранит, ну, в общем, предпочтения. Это не универсальный реестр, обрабатывающий API, как.NET
К чтению-записи каждый ключ я предполагаю JNI, или внешний инструмент был бы подходом для взятия как шоу Mark.
Существует немного поставщиков услуг JNDI для работы с реестром окон.
можно было наблюдать http://java.sun.com/products/jndi/serviceproviders.html .
От быстрого Google:
Проверка WinPack для JNIWrapper. Это имеет полную поддержку Windows Registry access включая Чтение и Запись.
Демонстрации WinPack реализовали Средство просмотра Реестра как пример.
Проверка в http://www.teamdev.com/jniwrapper/winpack/#registry_access
И...
существует также попытка JNIRegistry http://www.trustice.com/java/jnireg/
существует также опция вызова внешнего приложения, которое ответственно за чтение / запись реестра.
Да, использование java.util. Предпочтительный API, так как реализация Windows его использует Реестр в качестве бэкенда.
В конце это зависит от того, что Вы желаете сделать: хранение предпочтений Вашего приложения - то, что Предпочтения делает просто большой. Если Вы будете желать на самом деле изменить ключи реестра, не имеющие отношение к Вашему приложению, Вам будет нужно некоторое приложение JNI, как описано Mark (бесстыдная кража здесь):
От быстрого Google: Проверьте WinPack на JNIWrapper. Это имеет полную поддержку Windows Registry access включая Чтение и Запись.
Демонстрации WinPack реализовали Средство просмотра Реестра как пример.
Проверка в http://www.teamdev.com/jniwrapper/winpack/#registry_access
И...
существует также попытка JNIRegistry http://www.trustice.com/java/jnireg/
существует также опция вызова внешнего приложения, которое ответственно за чтение / запись реестра.
Я сделал это перед использованием jRegistryKey. Это - библиотека LGPL Java/JNI, которая может сделать то, в чем Вы нуждаетесь. Вот пример того, как я привык его для включенного редактирования Реестра через regedit и также опцию "Show Folder Options" для меня в Windows с помощью реестра.
import java.io.File;
import ca.beq.util.win32.registry.RegistryKey;
import ca.beq.util.win32.registry.RegistryValue;
import ca.beq.util.win32.registry.RootKey;
import ca.beq.util.win32.registry.ValueType;
public class FixStuff {
private static final String REGEDIT_KEY = "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System";
private static final String REGEDIT_VALUE = "DisableRegistryTools";
private static final String REGISTRY_LIBRARY_PATH = "\\lib\\jRegistryKey.dll";
private static final String FOLDER_OPTIONS_KEY = "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer";
private static final String FOLDER_OPTIONS_VALUE = "NoFolderOptions";
public static void main(String[] args) {
//Load JNI library
RegistryKey.initialize( new File(".").getAbsolutePath()+REGISTRY_LIBRARY_PATH );
enableRegistryEditing(true);
enableShowFolderOptions(true);
}
private static void enableShowFolderOptions(boolean enable) {
RegistryKey key = new RegistryKey(RootKey.HKEY_CURRENT_USER,FOLDER_OPTIONS_KEY);
RegistryKey key2 = new RegistryKey(RootKey.HKEY_LOCAL_MACHINE,FOLDER_OPTIONS_KEY);
RegistryValue value = new RegistryValue();
value.setName(FOLDER_OPTIONS_VALUE);
value.setType(ValueType.REG_DWORD_LITTLE_ENDIAN);
value.setData(enable?0:1);
if(key.hasValue(FOLDER_OPTIONS_VALUE)) {
key.setValue(value);
}
if(key2.hasValue(FOLDER_OPTIONS_VALUE)) {
key2.setValue(value);
}
}
private static void enableRegistryEditing(boolean enable) {
RegistryKey key = new RegistryKey(RootKey.HKEY_CURRENT_USER,REGEDIT_KEY);
RegistryValue value = new RegistryValue();
value.setName(REGEDIT_VALUE);
value.setType(ValueType.REG_DWORD_LITTLE_ENDIAN);
value.setData(enable?0:1);
if(key.hasValue(REGEDIT_VALUE)) {
key.setValue(value);
}
}
}
В демонстрации WinPack есть средство просмотра реестра реализовано в качестве примера.
Проверить на http://www.jniwrapper.com/winpack_features.jsp#registry
Кстати, WinPack был перемещен по следующему адресу:
Вы можете попробовать WinRun4J . Это средство запуска Java для Windows и хост службы, но он также предоставляет библиотеку для доступа к реестру.
(кстати, я работаю над этим проектом, поэтому дайте мне знать, если у вас есть какие-либо вопросы)
На самом деле, вам не нужен пакет стороннего производителя. В Windows есть утилита reg для всех операций реестра. Чтобы получить формат команды, перейдите в DOS propmt и введите:
reg /?
Вы можете вызвать reg через класс Runtime:
Runtime.getRuntime().exec("reg <your parameters here>");
Редактирование ключей и добавление новых простым способом с помощью команды, приведенной выше. Для чтения реестра необходимо получить вывод reg, и это немного сложновато. Вот код:
import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
/**
* @author Oleg Ryaboy, based on work by Miguel Enriquez
*/
public class WindowsReqistry {
/**
*
* @param location path in the registry
* @param key registry key
* @return registry value or null if not found
*/
public static final String readRegistry(String location, String key){
try {
// Run reg query, then read output with StreamReader (internal class)
Process process = Runtime.getRuntime().exec("reg query " +
'"'+ location + "\" /v " + key);
StreamReader reader = new StreamReader(process.getInputStream());
reader.start();
process.waitFor();
reader.join();
String output = reader.getResult();
// Output has the following format:
// \n<Version information>\n\n<key>\t<registry type>\t<value>
if( ! output.contains("\t")){
return null;
}
// Parse out the value
String[] parsed = output.split("\t");
return parsed[parsed.length-1];
}
catch (Exception e) {
return null;
}
}
static class StreamReader extends Thread {
private InputStream is;
private StringWriter sw= new StringWriter();
public StreamReader(InputStream is) {
this.is = is;
}
public void run() {
try {
int c;
while ((c = is.read()) != -1)
sw.write(c);
}
catch (IOException e) {
}
}
public String getResult() {
return sw.toString();
}
}
public static void main(String[] args) {
// Sample usage
String value = WindowsReqistry.readRegistry("HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\"
+ "Explorer\\Shell Folders", "Personal");
System.out.println(value);
}
}