338 votes

lecture/écriture dans le registre Windows à l'aide de Java

Comment est-il possible de lire/écrire dans le registre de Windows en utilisant java ?

21voto

Epaga Points 12717

Oui, en utilisant l'API java.util.Preferences, puisque l'implémentation de Windows utilise le registre comme backend.

En fin de compte, cela dépend de ce que vous voulez faire : stocker les préférences de votre application est ce que les Préférences font très bien. Si vous souhaitez modifier des clés de registre qui n'ont rien à voir avec votre application, vous aurez besoin d'une application JNI, telle que décrite par Mark (vol éhonté ici) :

D'après une recherche rapide sur Google : Vérifiez le WinPack pour JNIWrapper. Il prend en charge l'accès complet au registre Windows, y compris la lecture et l'écriture.

Le WinPack Demo a un Registry Viewer implémenté comme exemple.

Vérifiez à http://www.teamdev.com/jniwrapper/winpack/#registry_access

Et...

Il y a aussi essayer JNIRegistry @ http://www.trustice.com/java/jnireg/

Il est également possible d'invoquer une application externe, qui se charge de lire/écrire le registre.

11voto

Mark Ingram Points 24995

D'après une recherche rapide sur Google :

Vérifiez le WinPack pour JNIWrapper. Il s'agit de a un accès complet au registre de Windows y compris la lecture et l'écriture.

La démo de WinPack a le Registry Viewer est implémenté à titre d'exemple.

Vérifiez à http://www.teamdev.com/jniwrapper/winpack/#registry_access

Et...

Il y a aussi essayer JNIRegistry @ http://www.trustice.com/java/jnireg/

Il est également possible d'invoquer une application externe, qui se charge de lire/écrire le registre.

10voto

gousli Points 41

Voici une version modifiée de la solution d'Oleg. J'ai remarqué que sur mon système (Windows server 2003), la sortie de "reg query" n'est pas séparée par des tabulations (' \t ), mais à 4 espaces près.

J'ai également simplifié la solution, car un fil n'est pas nécessaire.

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);

      InputStream is = process.getInputStream();
      StringBuilder sw = new StringBuilder();

      try
      {
         int c;
         while ((c = is.read()) != -1)
             sw.append((char)c);
      }
      catch (IOException e)
      { 
      }

      String output = sw.toString();

      // Output has the following format:
      // \n<Version information>\n\n<key>    <registry type>    <value>\r\n\r\n
      int i = output.indexOf("REG_SZ");
      if (i == -1)
      {
          return null;
      }

      sw = new StringBuilder();
      i += 6; // skip REG_SZ

      // skip spaces or tabs
      for (;;)
      {
         if (i > output.length())
             break;
         char c = output.charAt(i);
         if (c != ' ' && c != '\t')
             break;
         ++i;
      }

      // take everything until end of line
      for (;;)
      {
         if (i > output.length())
             break;
         char c = output.charAt(i);
         if (c == '\r' || c == '\n')
             break;
         sw.append(c);
         ++i;
      }

      return sw.toString();
  }
  catch (Exception e)
  {
      return null;
  }

}

5voto

Ignat Points 31

Il existe peu de fournisseurs de services JNDI pour travailler avec le registre de Windows.

On pourrait observer http://java.sun.com/products/jndi/serviceproviders.html

5voto

Tom Anderson Points 22456

Comme il a été noté, l'API Préférences utilise le registre pour stocker les préférences, mais ne peut pas être utilisée pour accéder à l'ensemble du registre.

Cependant, un pirate du nom de David Croft a découvert qu'il est possible d'utiliser les méthodes de l'implémentation de l'API des préférences de Sun pour les tâches suivantes lire le registre de Windows à partir de Java sans JNI . Il y a quelques dangers à cela, mais cela vaut la peine d'y jeter un coup d'œil.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X