检测Windows还是Linux?

Ron*_*tes 123 java linux windows platform-detection

我正在寻求在Windows和Linux中运行一个通用的Java程序.

该程序需要在每个平台上做一些不同的事情.

那么我的Java程序如何检测它是否应该在Linux与Windows之间运行?

oth*_*man 176

apache commons lang有一个SystemUtils.java类 可以使用:

SystemUtils.IS_OS_LINUX
SystemUtils.IS_OS_WINDOWS
Run Code Online (Sandbox Code Playgroud)

  • 这更容易,并且可能已经过测试! (5认同)
  • 只需测试`os.name` 属性是否以`Windows` 开头... (2认同)
  • @GeorgeChakhidze 这正是软件在较新的 Windows 版本上崩溃的方式...... (2认同)

Puc*_*uce 78

尝试:

System.getProperty("os.name");
Run Code Online (Sandbox Code Playgroud)

http://docs.oracle.com/javase/7/docs/api/java/lang/System.html#getProperties%28%29

  • 另见[`os.arch`和`os.version`](http://pscode.org/prop/?prop=os.arch%2Cos.name%2Cos.version&format=TSV)(如果重要的话). (4认同)

Dom*_*aco 48

有用的简单类由我分叉:https: //gist.github.com/kiuz/816e24aa787c2d102dd0

public class OSValidator {

    private static String OS = System.getProperty("os.name").toLowerCase();

    public static void main(String[] args) {

        System.out.println(OS);

        if (isWindows()) {
            System.out.println("This is Windows");
        } else if (isMac()) {
            System.out.println("This is Mac");
        } else if (isUnix()) {
            System.out.println("This is Unix or Linux");
        } else if (isSolaris()) {
            System.out.println("This is Solaris");
        } else {
            System.out.println("Your OS is not support!!");
        }
    }

    public static boolean isWindows() {
        return OS.contains("win");
    }

    public static boolean isMac() {
        return OS.contains("mac");
    }

    public static boolean isUnix() {
        return (OS.contains("nix") || OS.contains("nux") || OS.contains("aix"));
    }

    public static boolean isSolaris() {
        return OS.contains("sunos");
    }
    public static String getOS(){
        if (isWindows()) {
            return "win";
        } else if (isMac()) {
            return "osx";
        } else if (isUnix()) {
            return "uni";
        } else if (isSolaris()) {
            return "sol";
        } else {
            return "err";
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

  • `OS.indexOf("...")> = 0`可以替换为`OS.contains("...")` (15认同)
  • 可能应该使用: System.getProperty("os.name").toLowerCase(Locale.ROOT); (3认同)
  • 谢谢.节省时间. (2认同)

小智 24

我认为这是使用Apache lang依赖来决定通过Java以编程方式运行哪个操作系统的最佳方法

import org.apache.commons.lang3.SystemUtils;

public class App {
    public static void main( String[] args ) {
        if(SystemUtils.IS_OS_WINDOWS_7)
            System.out.println("It's a Windows 7 OS");
        if(SystemUtils.IS_OS_WINDOWS_8)
            System.out.println("It's a Windows 8 OS");
        if(SystemUtils.IS_OS_LINUX)
            System.out.println("It's a Linux OS");
        if(SystemUtils.IS_OS_MAC)
            System.out.println("It's a MAC OS");
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 或者只是`SystemUtils.IS_OS_WINDOWS`. (5认同)
  • if(File.separatorChar =='\\')windows = true; (3认同)

pau*_*sm4 10

您可以使用"system.properties.os",例如:

public class GetOs {

  public static void main (String[] args) {
    String s = 
      "name: " + System.getProperty ("os.name");
    s += ", version: " + System.getProperty ("os.version");
    s += ", arch: " + System.getProperty ("os.arch");
    System.out.println ("OS=" + s);
  }
}

// EXAMPLE OUTPUT: OS=name: Windows 7, version: 6.1, arch: amd64
Run Code Online (Sandbox Code Playgroud)

这里有更多细节: