How do I programmatically determine operating system in Java?
Как мне программно определить операционную систему в Java?
Я хотел бы определить операционную систему хоста, на котором программно запущена моя Java-программа (например: я хотел бы иметь возможность загружать различные свойства в зависимости от того, нахожусь ли я на платформе Windows или Unix). Какой самый безопасный способ сделать это со 100% надежностью?
Все, что он делает, это распечатывает все свойства, предоставляемые вашими реализациями Java. Это даст вам представление о том, что вы можете узнать о своей среде Java с помощью свойств. :-)
Таким образом, каждый раз, когда вы запрашиваете ОС, вы не извлекаете свойство более одного раза за время существования вашего приложения.
Февраль 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; publicstaticfinalclassOsCheck { /** * types of Operating Systems */ publicenumOSType { Windows, MacOS, Linux, Other };
// cached result of OS detection protectedstatic OSType detectedOS;
/** * detect the operating system from the os.name System property and cache * the result * * @returns - the operating system detected */ publicstatic OSType getOperatingSystemType() { if (detectedOS == null) { StringOS= System.getProperty("os.name", "generic").toLowerCase(Locale.ENGLISH); if ((OS.indexOf("mac") >= 0) || (OS.indexOf("darwin") >= 0)) { detectedOS = OSType.MacOS; } elseif (OS.indexOf("win") >= 0) { detectedOS = OSType.Windows; } elseif (OS.indexOf("nux") >= 0) { detectedOS = OSType.Linux; } else { detectedOS = OSType.Other; } } return detectedOS; } }