ver sistema saber operativo java

saber - ¿Cómo determino programáticamente el sistema operativo en Java?



java saber sistema operativo (18)

Me gustaría determinar el sistema operativo del host que mi programa Java está ejecutando mediante programación (por ejemplo: me gustaría poder cargar diferentes propiedades según si estoy en una plataforma Windows o Unix) ¿Cuál es la forma más segura de hacerlo con una fiabilidad del 100%?


Algunos de los enlaces en las respuestas anteriores parecen estar rotos. He agregado punteros al código fuente actual en el código a continuación y ofrezco un enfoque para manejar el cheque con una enumeración como una respuesta para que se pueda usar una declaración de cambio al evaluar el resultado:

OsCheck.OSType ostype=OsCheck.getOperatingSystemType(); switch (ostype) { case Windows: break; case MacOS: break; case Linux: break; case Other: break; }

La clase de ayuda es:

/** * helper class to check the operating system this Java VM runs in * * please keep the notes below as a pseudo-license * * http://.com/questions/228477/how-do-i-programmatically-determine-operating-system-in-java * compare to http://svn.terracotta.org/svn/tc/dso/tags/2.6.4/code/base/common/src/com/tc/util/runtime/Os.java * http://www.docjar.com/html/api/org/apache/commons/lang/SystemUtils.java.html */ import java.util.Locale; public static final class OsCheck { /** * types of Operating Systems */ public enum OSType { Windows, MacOS, Linux, Other }; // cached result of OS detection protected static OSType detectedOS; /** * detect the operating system from the os.name System property and cache * the result * * @returns - the operating system detected */ public static OSType getOperatingSystemType() { if (detectedOS == null) { String OS = System.getProperty("os.name", "generic").toLowerCase(Locale.ENGLISH); if ((OS.indexOf("mac") >= 0) || (OS.indexOf("darwin") >= 0)) { detectedOS = OSType.MacOS; } else if (OS.indexOf("win") >= 0) { detectedOS = OSType.Windows; } else if (OS.indexOf("nux") >= 0) { detectedOS = OSType.Linux; } else { detectedOS = OSType.Other; } } return detectedOS; } }




Digamos que tienes una clase de Util para tales funciones de utilidad. A continuación, cree enumeraciones públicas para cada tipo de sistema operativo.

public class Util { public enum OS { WINDOWS, LINUX, MAC, SOLARIS };// Operating systems. private static OS os = null; public static OS getOS() { if (os == null) { String operSys = System.getProperty("os.name").toLowerCase(); if (operSys.contains("win")) { os = OS.WINDOWS; } else if (operSys.contains("nix") || operSys.contains("nux") || operSys.contains("aix")) { os = OS.LINUX; } else if (operSys.contains("mac")) { os = OS.MAC; } else if (operSys.contains("sunos")) { os = OS.SOLARIS; } } return os; } }

Luego, puede invocar fácilmente la clase de cualquier clase de la siguiente manera, (PS Como la variable os declaramos como estática, solo tomará tiempo una vez para identificar el tipo de sistema, luego se puede usar hasta que la aplicación se detenga).

switch (Util.getOS()) { case WINDOWS: //do windows stuff break; case LINUX:

y así...


El código a continuación muestra los valores que puede obtener de la API del sistema, todas estas cosas que puede obtener a través de esta API.

public class App { public static void main( String[] args ) { //Operating system name System.out.println(System.getProperty("os.name")); //Operating system version System.out.println(System.getProperty("os.version")); //Path separator character used in java.class.path System.out.println(System.getProperty("path.separator")); //User working directory System.out.println(System.getProperty("user.dir")); //User home directory System.out.println(System.getProperty("user.home")); //User account name System.out.println(System.getProperty("user.name")); //Operating system architecture System.out.println(System.getProperty("os.arch")); //Sequence used by operating system to separate lines in text files System.out.println(System.getProperty("line.separator")); System.out.println(System.getProperty("java.version")); //JRE version number System.out.println(System.getProperty("java.vendor.url")); //JRE vendor URL System.out.println(System.getProperty("java.vendor")); //JRE vendor name System.out.println(System.getProperty("java.home")); //Installation directory for Java Runtime Environment (JRE) System.out.println(System.getProperty("java.class.path")); System.out.println(System.getProperty("file.separator")); } }

Respuestas: -

Windows 7 6.1 ; C:/Users/user/Documents/workspace-eclipse/JavaExample C:/Users/user user amd64 1.7.0_71 http://java.oracle.com/ Oracle Corporation C:/Program Files/Java/jre7 C:/Users/user/Documents/workspace-Eclipse/JavaExample/target/classes /



Este código para mostrar toda la información sobre el tipo de sistema operativo, el nombre, la información de Java, etc.

public static void main(String[] args) { // TODO Auto-generated method stub Properties pro = System.getProperties(); for(Object obj : pro.keySet()){ System.out.println(" System "+(String)obj+" : "+System.getProperty((String)obj)); } }


Las siguientes clases de JavaFX tienen métodos estáticos para determinar el sistema operativo actual (isWindows (), isLinux () ...):

  • com.sun.javafx.PlatformUtil
  • com.sun.media.jfxmediaimpl.HostUtils
  • com.sun.javafx.util.Utils

Ejemplo:

if (PlatformUtil.isWindows()){ ... }


Me gustó la respuesta de Wolfgang, solo porque creo que ese tipo de cosas deberían ser consts ...

así que lo he reformulado un poco para mí, y pensé en compartirlo :)

/** * types of Operating Systems * * please keep the note below as a pseudo-license * * helper class to check the operating system this Java VM runs in * http://.com/questions/228477/how-do-i-programmatically-determine-operating-system-in-java * compare to http://svn.terracotta.org/svn/tc/dso/tags/2.6.4/code/base/common/src/com/tc/util/runtime/Os.java * http://www.docjar.com/html/api/org/apache/commons/lang/SystemUtils.java.html */ public enum OSType { MacOS("mac", "darwin"), Windows("win"), Linux("nux"), Other("generic"); private static OSType detectedOS; private final String[] keys; private OSType(String... keys) { this.keys = keys; } private boolean match(String osKey) { for (int i = 0; i < keys.length; i++) { if (osKey.indexOf(keys[i]) != -1) return true; } return false; } public static OSType getOS_Type() { if (detectedOS == null) detectedOS = getOperatingSystemType(System.getProperty("os.name", Other.keys[0]).toLowerCase()); return detectedOS; } private static OSType getOperatingSystemType(String osKey) { for (OSType osType : values()) { if (osType.match(osKey)) return osType; } return Other; } }


Octubre de 2008:

Yo recomendaría cachearlo en una variable estática:

public static final class OsUtils { private static String OS = null; public static String getOsName() { if(OS == null) { OS = System.getProperty("os.name"); } return OS; } public static boolean isWindows() { return getOsName().startsWith("Windows"); } public static boolean isUnix() // and so on }

De esa manera, cada vez que solicite la O, no obtendrá la propiedad más de una vez en la vida de su aplicación.

Febrero 2016: 7+ años después:

Hay un error con Windows 10 (que no existía en el momento de la respuesta original).
Consulte " ¿os.name de Java para Windows 10? "


Prueba esto, simple y facil

System.getProperty("os.name"); System.getProperty("os.version"); System.getProperty("os.arch");


Puede obtener el nombre del tipo de SO usando

System.out.println(System.getProperty("os.name"));

Puede obtener toda la información relacionada con el sistema operativo por:

public class MyFirstJavaProgram { public static void main(String []args) { System.getProperties().list(System.out); } }

Saldrá muchos detalles.

- listado de propiedades -

java.runtime.name = OpenJDK Runtime Environment

sun.boot.library.path = / usr / lib / jvm / java-1.8.0-openjdk-1.8.0 ...

java.vm.version = 25.65-b01

java.vm.vendor = Oracle Corporation

java.vendor.url = http://java.oracle.com/

path.separator =:

java.vm.name = OpenJDK VM de servidor de 64 bits

file.encoding.pkg = sun.io

user.country = US

sun.java.launcher = SUN_STANDARD

sun.os.patch.level = desconocido

java.vm.specification.name = Especificación de máquina virtual Java

usuario.dir = / web / com / 1502258867_87863

java.runtime.version = 1.8.0_65-b17

java.awt.graphicsenv = sun.awt.X11GraphicsEnvironment

java.endorsed.dirs = / usr / lib / jvm / java-1.8.0-openjdk-1.8.0 ...

os.arch = amd64

java.io.tmpdir = / tmp

line.separator =

java.vm.specification.vendor = Oracle Corporation

os.name = Linux

sun.jnu.encoding = UTF-8

java.library.path = / home / cg / root / GNUstep / Library / Librari ...

java.specification.name = Especificación de la API de la plataforma Java

java.class.version = 52.0

sun.management.compiler = HotSpot Compiladores en niveles de 64 bits

os.version = 3.10.0-327.4.4.el7.x86_64

user.home = / usr / share / httpd

user.timezone =

java.awt.printerjob = sun.print.PSPrinterJob

file.encoding = UTF-8

java.specification.version = 1.8

user.name = apache

java.class.path = / home / cg / root / GNUstep / Library / Librari ...

java.vm.specification.version = 1.8

sun.arch.data.model = 64

java.home = / usr / lib / jvm / java-1.8.0-openjdk-1.8.0 ...

sun.java.command = MyFirstJavaProgram

java.specification.vendor = Oracle Corporation

user.language = en

awt.toolkit = sun.awt.X11.XToolkit

java.vm.info = modo mixto

java.version = 1.8.0_65

java.ext.dirs = / usr / lib / jvm / java-1.8.0-openjdk-1.8.0 ...

sun.boot.class.path = / usr / lib / jvm / java-1.8.0-openjdk-1.8.0 ...

java.vendor = Oracle Corporation

file.separator = /

java.vendor.url.bug = http://bugreport.sun.com/bugreport/

sun.cpu.endian = poco

sun.io.unicode.encoding = UnicodeLittle

sun.cpu.isalist =


Puedes usar:

System.getProperty("os.name")

PS Puede que este código te sea útil:

class ShowProperties { public static void main(String[] args) { System.getProperties().list(System.out); } }

Todo lo que hace es imprimir todas las propiedades proporcionadas por sus implementaciones de Java. Le dará una idea de lo que puede averiguar sobre su entorno Java a través de las propiedades. :-)


Si está interesado en cómo un proyecto de código abierto hace cosas como esta, puede consultar la clase de terracota (Os.java) que maneja esta basura aquí:

Y puedes ver una clase similar para manejar versiones JVM (Vm.java y VmVersion.java) aquí:


Solo puedes usar el método sun.awt.OSInfo # getOSType ()


Tomado de este proyecto https://github.com/RishiGupta12/serial-communication-manager

String osName = System.getProperty("os.name"); String osNameMatch = osName.toLowerCase(); if(osNameMatch.contains("linux")) { osType = OS_LINUX; }else if(osNameMatch.contains("windows")) { osType = OS_WINDOWS; }else if(osNameMatch.contains("solaris") || osNameMatch.contains("sunos")) { osType = OS_SOLARIS; }else if(osNameMatch.contains("mac os") || osNameMatch.contains("macos") || osNameMatch.contains("darwin")) { osType = OS_MAC_OS_X; }else { }


private static String OS = System.getProperty("os.name").toLowerCase(); public static void detectOS() { if (isWindows()) { } else if (isMac()) { } else if (isUnix()) { } else { } } private static boolean isWindows() { return (OS.indexOf("win") >= 0); } private static boolean isMac() { return (OS.indexOf("mac") >= 0); } private static boolean isUnix() { return (OS.indexOf("nux") >= 0); }


String osName = System.getProperty("os.name"); System.out.println("Operating system " + osName);