Comment puis-je déterminer par programmation du système d'exploitation en Java?
Je tiens à déterminer le système d'exploitation de l'hôte que mon programme Java est en cours d'exécution par programme (par exemple: je voudrais être en mesure de charger des propriétés différentes selon que je suis sur un ordinateur Windows ou Unix). Quel est le moyen le plus sûr de le faire avec 100% de fiabilité?
InformationsquelleAutor karlgrz | 2008-10-23
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser:
P. S. Vous pouvez trouver ce code utile:
Tout ce qu'il fait est d'imprimer toutes les propriétés fournies par votre implémentations Java. Ça vous donne une idée de ce à quoi vous pouvez vous renseigner sur votre environnement Java via les propriétés. 🙂
Windows 10
et pourtantos.name
me donneWindows 8.1
. Pourquoi est-ce? Où est-ce en venir?Comme indiqué dans d'autres réponses, Système.getProperty fournit les données brutes. Cependant, la Apache Commons Lang composant fournit un wrapper java.lang.Système avec handy propriétés comme
SystemUtils.IS_OS_WINDOWS
, à l'instar de ladite Swingx OS util.Oct. 2008:
Je vous recommande de le mettre en cache dans une variable statique:
De cette façon, chaque fois que vous demandez pour le système d'exploitation, vous n'avez pas récupérer la propriété de plus d'une fois dans la durée de vie de votre application.
Février 2016: 7+ ans plus tard:
Il y a un bug avec Windows 10 (qui n'existait pas à l'époque de l'original de la réplique).
Voir "Java est “os.le nom” de Windows 10?"
isWindows
,isUnix
, etc. De cette façon, vous économisez sur la comparaison de chaînes temps aussi.if(getOsName().startsWith("Windows 9")) { /* 95 and 98 */ } else { }
certains des liens dans les réponses ci-dessus semblent être brisé. J'ai ajouté des pointeurs de code source de courant dans le code ci-dessous et offrent une approche pour le traitement de la vérifier avec un enum comme une réponse, de sorte qu'une instruction switch peut être utilisé pour évaluer le résultat:
La classe helper est:
La suite de JavaFX les classes ont des méthodes statiques pour déterminer le système d'exploitation actuel (isWindows(),isLinux()...):
Exemple:
Si vous êtes intéressé par la façon dont un projet open source n'des trucs comme cela, vous pouvez consulter la terre Cuite classe (Os.java) qui gère cette ordure ici:
http://svn.terracotta.org/svn/tc/dso/trunk/code/base/common/src/com/tc/util/runtime/Et vous pouvez voir une catégorie similaire pour gérer les versions de la JVM (Vm.java et VmVersion.java) ici:
toLowerCase
sans spécifier de paramètres régionauxPris de ce projet https://github.com/RishiGupta12/serial-communication-manager
Disons que vous avez un Util de classe pour de telles fonctions utilitaires. Puis créez public enum pour chaque type de système d'exploitation.
Alors vous pouvez facilement appeler la classe de toute la classe comme suit(P. S. Depuis la, nous avons déclaré os variable statique, il consomme du temps qu'une seule fois pour identifier le type de système, alors il peut être utilisé jusqu'à ce que votre application s'arrête. )
et ainsi de suite...
Je trouve que le OS Utils de Swingx fait le travail.
Essayer ce,simple et facile
Code ci-dessous indique les valeurs que vous pouvez obtenir à partir de l'API Système, toutes ces choses que vous pouvez obtenir par le biais de cette API.
Réponses:-
Je pense que suivant peut donner une couverture plus large dans moins de lignes
Plus de détails ici: https://commons.apache.org/proper/commons-exec/apidocs/org/apache/commons/exec/OS.html
J'ai aimé Wolfgang réponse, tout simplement parce que je crois que les choses comme ça devrait être consts...
j'ai donc reformulé un peu pour moi-même, et la pensée de le partager 🙂
Vous pouvez simplement utiliser le soleil.awt.OSInfo#getOSType() la méthode
Ce code pour afficher toutes les informations sur le système de type de système d'exploitation,nom , java de l'information et ainsi de suite.
Dans com.soleil.jna.Plate-forme de classe, vous pouvez trouver utile des méthodes statiques comme
et beaucoup plus.
Si vous utilisez Maven seulement ajouter de la dépendance
Sinon, il suffit de trouver la jna de la bibliothèque de fichier jar (ex. jna-5.2.0.jar) et l'ajouter au classpath.
Suffit d'utiliser
com.sun.javafx.util.Utils
comme ci-dessous.OU DE L'UTILISATION