Как программно определить операционную систему в Java?
Я хотел бы определить операционную систему 9X_core-java хоста, на которой моя программа Java работает 9X_javax программно (например: я хотел бы иметь возможность 9X_openjdk загружать различные свойства в зависимости 9X_jre от того, нахожусь ли я на платформе Windows 9X_jre или Unix). Каков самый безопасный способ 9X_java-se сделать это со стопроцентной надежностью?
Ответ #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 с помощью свойств. :-)
- Я использую 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.
- Это действительно удобно. Вы открываете для себя новые возможности 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?"
- Во времена 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;
}
}
- (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()){
...
}
- это должно быть выше<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:
Вот и все!
- Я хочу использовать этот фрагмент кода в проекте с открытым исходным кодом (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
.
Ответ #8
Ответ на вопрос: Как программно определить операционную систему в Java?
Попробуйте это, просто и легко
System.getProperty("os.name");
System.getProperty("os.version");
System.getProperty("os.arch");
9X_javax
Ответ #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) здесь:
- Этот класс 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
Ответ #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
\
Ответ #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
}
}
Ответ #13
Ответ на вопрос: Как программно определить операционную систему в Java?
Я считаю, что OS Utils from Swingx выполняет свою работу.
9X_.java
- Последняя версия находится здесь: 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
Ответ #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;
}
}
}
Ответ #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;
}
}
- ХХХХХ ... хороший ... @ ...
Ответ #17
Ответ на вопрос: Как программно определить операционную систему в Java?
Вы можете просто использовать метод sun.awt.OSInfo 9X_openjdk # getOSType()
Ответ #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));
}
}
-
14
-
14
-
6
-
4
-
6
-
4
-
1
-
7
-
7
-
8
-
1
-
4
-
6
-
28
-
30
-
13
-
9
-
11
-
35
-
4
-
2
-
29
-
8
-
4
-
10
-
5
-
5
-
12
-
11
-
13
-
12
-
9
-
5
-
3
-
8
-
4
-
3
-
11
-
8
-
5
-
7
-
5
-
5
-
7
-
4
-
5
-
6
-
4
-
6
-
12