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

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

613
0
18
Общее количество ответов: 18

Ответ #1

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

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

System.getProperty("os.name") 

P.S. Вы можете найти 9X_java-libraries этот код полезным:

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

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

717
2

  • Я использую Windows 10, а os.name дает мне Windows 8.1. Эт ...

Ответ #2

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

Как указано в других ответах, System.getProperty 9X_operating-systems предоставляет необработанные данные. Однако 9X_.java Apache Commons Lang component предоставляет wrapper for java.lang.System с удобными свойствами, такими 9X_operating-system как SystemUtils.IS_OS_WINDOWS, во многом аналогично вышеупомянутой 9X_java утилите ОС Swingx.

190
1

  • Это действительно удобно. Вы открываете для себя новые возможности Apache Lang3 каждый день!< ...

Ответ #3

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

Октябрь. 2008:

Я бы рекомендовал кешировать 9X_.java его в статической переменной:

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 } 

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


Февраль 2016 г .: 7+ лет 9X_javax спустя:

В Windows 10 обнаружена ошибка (которой 9X_javax не было на момент первоначального ответа).
См. "Java's “os.name” for Windows 10?"

101
6

  • Во времена Windows 10 вы можете себе представить, почему это было плохой практикой. Пожалуйста, не делайте `if (getOsName(). Pla ...

Ответ #4

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

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

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

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

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

55
2

  • (OS.indexOf ("darwin")> = 0) никогда не может быть и ...

Ответ #5

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

Следующие классы JavaFX имеют статические 9X_operating-systems методы для определения текущей ОС (isWindows(), isLinux() ...):

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

Пример:

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

48
4

  • это должно быть выше<p><span c ...

Ответ #6

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

TL; DR

Для доступа к ОС используйте: System.getProperty("os.name").


Но ПОДОЖДИТЕ !!!

Почему бы 9X_operating-system не создать служебный класс, сделайте его 9X_core-java многоразовым! И, вероятно, намного быстрее 9X_jdk при нескольких вызовах. Чисто, ясно, быстрее!

Создайте класс Util 9X_java-libraries для таких служебных функций. Затем создайте 9X_operating-systems общедоступные перечисления для каждого типа 9X_core-java операционной системы.

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; } } 

Теперь вы можете легко 9X_jdk вызвать класс из любого класса следующим 9X_jre образом: (PS Поскольку мы объявили переменную 9X_java os как статическую, ей потребуется время 9X_os только один раз, чтобы определить тип системы, затем 9X_core-java ее можно использовать, пока ваше приложение 9X_os не остановится.)

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

Вот и все!

41
2

  • Я хочу использовать этот фрагмент кода в проекте с открытым исходным кодом (https://github.c ...

Ответ #7

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

Небольшим примером того, чего вы пытаетесь 9X_java достичь, вероятно, будет class, похожий на то, что 9X_core-java внизу:

import java.util.Locale; public class OperatingSystem { private static String OS = System.getProperty("os.name", "unknown").toLowerCase(Locale.ROOT); public static boolean isWindows() { return OS.contains("win"); } public static boolean isMac() { return OS.contains("mac"); } public static boolean isUnix() { return OS.contains("nux"); } } 

Эта конкретная реализация достаточно 9X_.java надежна и должна быть универсальной. Просто 9X_os скопируйте и вставьте его в выбранный вами 9X_java-api class.

18
0

Ответ #8

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

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

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

9X_javax

11
0

Ответ #9

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

Если вас интересует, как проект с открытым 9X_jre исходным кодом делает подобные вещи, вы 9X_operating-systems можете проверить класс Terracotta (Os.java), который 9X_core-java обрабатывает этот мусор здесь:

  • http://svn.terracotta.org/svn/tc/dso/trunk/code/base/common/src/com/tc/util/runtime/
  • http://svn.terracotta.org/svn/tc/dso/tags/2.6.4/code/base/common/src/com/tc/util/runtime/

И вы можете 9X_java-libraries увидеть аналогичный класс для обработки 9X_operating-system версий JVM (Vm.java и VmVersion.java) здесь:

  • http://svn.terracotta.org/svn/tc/dso/trunk/common/src/main/java/com/tc/util/runtime/

10
1

  • Этот класс Terracotta довольно обши ...

Ответ #10

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

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

import org.apache.commons.exec.OS; if (OS.isFamilyWindows()){ //load some property } else if (OS.isFamilyUnix()){ //load some other property } 

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

9
0

Ответ #11

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

В приведенном ниже коде показаны значения, которые 9X_os вы можете получить из системного API, это 9X_oraclejdk все, что вы можете получить с помощью этого 9X_java 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 \ 

8
0

Ответ #12

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

Если вы работаете в среде, где важна безопасность, прочтите это.

Не доверяйте свойству, полученному с помощью 9X_java-libraries подпрограммы System#getProperty(String)! На самом деле, почти все 9X_operating-system свойства, включая os.arch, os.name и os.version, не предназначены 9X_os только для чтения, как вы могли бы ожидать, - наоборот, на 9X_java-api самом деле все наоборот.

Прежде всего, любой 9X_operating-systems код с достаточным разрешением для вызова 9X_operating-system подпрограммы System#setProperty(String, String) может изменять возвращаемый 9X_os литерал по своему желанию. Однако это не 9X_java обязательно основная проблема, поскольку 9X_.java ее можно решить с помощью так называемого 9X_jdk SecurityManager, как более подробно описано в here.

Фактическая 9X_java проблема заключается в том, что любой пользователь 9X_operating-system может редактировать эти свойства при запуске 9X_operating-system рассматриваемого JAR (через -Dos.name=, -Dos.arch= и т. д.). Возможный 9X_java-se способ избежать подделки параметров приложения 9X_.java - запросить RuntimeMXBean, как показано here. Следующий фрагмент 9X_oraclejdk кода должен дать представление о том, как 9X_openjdk этого можно достичь.

RuntimeMXBean runtimeMxBean = ManagementFactory.getRuntimeMXBean(); List arguments = runtimeMxBean.getInputArguments(); for (String argument : arguments) { if (argument.startsWith("-Dos.name") { // System.getProperty("os.name") altered } else if (argument.startsWith("-Dos.arch") { // System.getProperty("os.arch") altered } } 

8
0

Ответ #13

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

Я считаю, что OS Utils from Swingx выполняет свою работу.

9X_.java

6
3

  • Последняя версия находится здесь: http://java.net/projects/swingx/sources/svn/content/trunk/ ...

Ответ #14

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

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

Ответ #15

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

Немного более короткая, понятная (и тщательно 9X_operating-system рассчитанная) версия основных ответов:

switch(OSType.DETECTED){ ... } 

Вспомогательное 9X_os перечисление:

public enum OSType { Windows, MacOS, Linux, Other; public static final OSType DETECTED; static{ String OS = System.getProperty("os.name", "generic").toLowerCase(Locale.ENGLISH); if ((OS.contains("mac")) || (OS.contains("darwin"))) { DETECTED = OSType.MacOS; } else if (OS.contains("win")) { DETECTED = OSType.Windows; } else if (OS.contains("nux")) { DETECTED = OSType.Linux; } else { DETECTED = OSType.Other; } } } 

4
0

Ответ #16

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

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

поэтому я немного перефразировал это 9X_openjdk для себя и решил поделиться им :)

/** * 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://stackoverflow.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; } } 

3
2

  • ХХХХХ ... хороший ... @ ...

Ответ #17

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

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

3
0

Ответ #18

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

Этот код для отображения всей информации 9X_operating-system о типе операционной системы, имени, java-информации 9X_operating-system и т. д.

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)); } } 

2
0