好的,我知道这System.getProperty("os.name")会给我我正在运行的操作系统的名称,但这不是很多帮助.我需要知道的是,如果我运行的操作系统是一个类似Unix的操作系统,我不关心它是HP-UX,AIX,Mac OS X还是其他什么.
从可能的os.name值列表看起来像检测"类Unix"操作系统正在检查是否一个快速和肮脏的方式os.name并没有包含的"Windows".给我的误报是操作系统,我的代码不太可能遇到!不过,如果有的话,我很想知道更好的方法.
Pas*_*ent 33
使用org.apache.commons.lang.SystemUtilsCommons Lang 的实用程序类,它有一个很好的IS_OS_UNIX常量.来自javadoc:
是
true如果这是一个POSIX compilant系统,在任何AIX,HP-UX,IRIX的Linux,MacOSX的,Solaris或SUN OS的.如果OS_NAME为空,则该字段将返回false.
测试成为:
if (SystemUtils.IS_OS_UNIX) {
...
}
Run Code Online (Sandbox Code Playgroud)
简单,有效,易于阅读,没有神秘的技巧.
Dav*_*ski 19
我已经在Windows XP,Vista,Win7,Mac OS 10.3 - 10.6和各种Linux发行版的生产代码中使用了您的方案而没有问题:
if (System.getProperty("os.name").startsWith("Windows")) {
// includes: Windows 2000, Windows 95, Windows 98, Windows NT, Windows Vista, Windows XP
} else {
// everything else
}
Run Code Online (Sandbox Code Playgroud)
基本上,通过不检测Windows来检测类Unix.
Mik*_*keD 17
File.listRoots() 将为您提供一个文件系统根目录的数组.
如果你是一个类Unix系统,那么数组应该包含一个条目"/",在Windows系统上你会得到类似的东西["C:", "D:", ...]
编辑: @chris_l:我完全忘记了手机.一些挖掘出现了Android返回"/\0\0"- 斜线后跟两个空字节(假设是一个错误).看起来我们暂时通过运气和巧合避免误报.遗憾的是,无法在其他手机上找到好的数据.
无论如何在台式机和手机上运行相同的代码可能不是一个好主意,但有趣的是要知道.看起来它需要检查特定功能而不仅仅是系统类型.
Javadoc说:在UNIX系统上,这个*字段的值是'/'; 在Microsoft Windows系统上它是'\'.
System.out.println( File.separatorChar == '/' ? "Unix" : "Windows" );
Run Code Online (Sandbox Code Playgroud)