Как программно определить операционную систему на Java? - PullRequest
458 голосов
/ 23 октября 2008

Я бы хотел определить операционную систему хоста, на котором моя Java-программа работает программно (например: я хотел бы иметь возможность загружать различные свойства в зависимости от того, нахожусь ли я на платформе Windows или Unix). Какой самый безопасный способ сделать это со 100% надежностью?

Ответы [ 18 ]

6 голосов
/ 07 мая 2014

Попробуйте, просто и легко

System.getProperty("os.name");
System.getProperty("os.version");
System.getProperty("os.arch");
5 голосов
/ 27 сентября 2018

Я думаю, что следующее может дать более широкий охват в меньшем количестве строк

import org.apache.commons.exec.OS;

if (OS.isFamilyWindows()){
                //load some property
            }
else if (OS.isFamilyUnix()){
                //load some other property
            }

Подробнее здесь: https://commons.apache.org/proper/commons-exec/apidocs/org/apache/commons/exec/OS.html

5 голосов
/ 03 мая 2015

Ниже код показывает значения, которые вы можете получить из системного API, все эти вещи вы можете получить через этот 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"));
    }
}

Ответы: -

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
\
4 голосов
/ 29 апреля 2013
String osName = System.getProperty("os.name");
System.out.println("Operating system " + osName);
2 голосов
/ 22 января 2016

Вы можете просто использовать метод sun.awt.OSInfo # getOSType ()

2 голосов
/ 17 марта 2014

Мне понравился ответ Вольфганга, просто потому, что я считаю, что такие вещи должны быть не ...

так что я немного перефразировал его для себя и подумал поделиться им:)

/**
 * 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
 * /219321/kak-programmno-opredelit-operatsionnuy-sistemu-na-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;
    }
}
1 голос
/ 01 августа 2014

Этот код для отображения всей информации о типе ОС, имени, информации о Java и т. Д.

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));
    }
}
0 голосов
/ 15 мая 2019

В классе com.sun.jna.Platform вы можете найти полезные статические методы, такие как

Platform.isWindows();
Platform.is64Bit();
Platform.isIntel();
Platform.isARM();

и многое другое.

Если вы используете Maven, просто добавьте зависимость

<dependency>
 <groupId>net.java.dev.jna</groupId>
 <artifactId>jna</artifactId>
 <version>5.2.0</version>
</dependency>

В противном случае просто найдите jar-файл библиотеки jna (например, jna-5.2.0.jar) и добавьте его в classpath.

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