Вопрос-ответ

How do I programmatically determine operating system in Java?

Как мне программно определить операционную систему в Java?

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

Переведено автоматически
Ответ 1

Вы можете использовать:

System.getProperty("os.name")

P.S. Возможно, этот код покажется вам полезным:

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

Все, что он делает, это распечатывает все свойства, предоставляемые вашими реализациями Java. Это даст вам представление о том, что вы можете узнать о своей среде Java с помощью свойств. :-)

Ответ 2

Как указано в других ответах, System.getProperty предоставляет необработанные данные. Однако компонент Apache Commons Lang предоставляет оболочку для java.lang.Система с удобными свойствами, такими как SystemUtils.IS_OS_WINDOWS, очень похожая на вышеупомянутую утилиту Swingx OS.

Ответ 3

Октябрь 2008:

Я бы рекомендовал кэшировать ее в статической переменной:

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
}

Таким образом, каждый раз, когда вы запрашиваете ОС, вы не извлекаете свойство более одного раза за время существования вашего приложения.


Февраль 2016: более 7 лет спустя:

В Windows 10 обнаружена ошибка (которой не существовало на момент первоначального ответа).
Смотрите "Java“os.name ”для Windows 10?"

Ответ 4

некоторые ссылки в приведенных выше ответах, похоже, не работают. Я добавил указатели на текущий исходный код в приведенном ниже коде и предлагаю подход для обработки проверки с перечислением в качестве ответа, чтобы при оценке результата можно было использовать оператор switch:

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

Вспомогательный класс - это:

/**
* helper class to check the operating system this Java VM runs in
*
* please keep the notes below as a pseudo-license
*
* http://javalang.ru/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;
}
}
java