有没有办法使用Java查找操作系统名称?

8

有没有办法使用Java查找操作系统名称?

我尝试了下面的代码,但它只会返回类似于(Linux,Windows等)的结果。

System.getProperty("os.name")

我需要检测以下格式:

Linux - "ubuntu, mandriva .. ",windows - "xp,vista ..."

很抱歉我的英语不好 :-( !!!
有任何想法吗?

在你的例子中,os.name 会返回例如 Windows XP - assylias
@assylias 抱歉,我是 Linux 用户。我不知道 Windows 的结果。我想要的是 Linux 操作系统的名称(如 Ubuntu…)。 - sprabhakaran
我是这个博客的新手。感谢分享链接。 - sprabhakaran
可能是重复的问题:如何在Java中以编程方式确定操作系统? - High Performance Mark
4个回答

11
您可以使用 System.getProperty() 方法获取以下属性:
  • os.name:操作系统名称
  • os.arch:操作系统架构
  • os.version:操作系统版本
在您的情况下,我相信您正在寻找 os.version 属性。 System.getProperties()javadocs包含了您可以检索的所有属性的完整列表。 编辑 我刚刚在 Linux Mint 上进行了测试,发现获取 os.version 属性实际上返回的是内核版本,而不是发行版版本:
Linux
amd64
2.6.38-8-generic

在阅读这篇文章后,似乎没有可靠的方法可以通过Java API找到正在运行的Linux发行版。

如果您知道自己正在运行Linux,则可以从Java中运行以下系统命令之一,但您需要使用grep /解析出发行版:

  • cat /etc/*-release

2
实际上,“uname -a”不包括发行版名称。(或者至少在Fedora上不包括。)而且你应该使用“/etc/system-release”……因为(同样在Fedora上,至少是这样)“/etc/*-release”模式匹配3个路径名。 - Stephen C
嗯,我猜那样会变得很丑陋,因为在Linux Mint上,发行版名称存储在/etc/lsb-release中。我记得有一段时间阅读过要包含通配符,因为存储发行版版本的文件在各个发行版之间不一致。也许将输出导入到“grep DISTRIB_DESCRIPTION”中会更值得?无论如何,我会编辑我的答案 - 感谢您的反馈。 - Mansoor Siddiqui
在 Fedora 上,使用 grep "/etc/*-release" 查找 DISTRIB_DESCRIPTION 是行不通的。这些文件都只包含 "Fedora release 16 (Verne)"。 - Stephen C

5
这可能对您有所帮助:
System.out.println("\nName of the OS: " + System.getProperty("os.name"));
System.out.println("Version of the OS: " + System.getProperty("os.version"));
System.out.println("Architecture of the OS: " + System.getProperty("os.arch"));

编辑:在Windows下,它返回以下内容:

Name of the OS: Windows XP
Version of the OS: 5.1
Architecture of the OS: x86

1

您可以查询一些系统属性。请参阅教程以获取详细信息。这三个属性的某些或全部组合应该能帮助您:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接