我从Java中获取了我正在使用的操作系统的名称。请参见以下代码:
System.out.println(System.getProperty("os.name"));
在Windows XP中,它的打印如下:
Windows XP
。但在Ubuntu/Fedora中,它只显示Linux
。请问有人可以帮我使用Java代码找出我正在使用的Linux版本(如Ubuntu或Fedora)吗?是否可能从Java中找到Linux发行版?我从Java中获取了我正在使用的操作系统的名称。请参见以下代码:
System.out.println(System.getProperty("os.name"));
Windows XP
。但在Ubuntu/Fedora中,它只显示Linux
。请问有人可以帮我使用Java代码找出我正在使用的Linux版本(如Ubuntu或Fedora)吗?是否可能从Java中找到Linux发行版?String[] cmd = {
"/bin/sh", "-c", "cat /etc/*-release" };
try {
Process p = Runtime.getRuntime().exec(cmd);
BufferedReader bri = new BufferedReader(new InputStreamReader(
p.getInputStream()));
String line = "";
while ((line = bri.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
更新
如果你只需要版本,可以尝试使用uname -a命令。
更新
一些Linux发行版在/proc/version文件中包含发行版的版本。以下是一个示例,可以从Java中打印出所有这些版本,而不需要调用任何SO命令。
//lists all the files ending with -release in the etc folder
File dir = new File("/etc/");
File fileList[] = new File[0];
if(dir.exists()){
fileList = dir.listFiles(new FilenameFilter() {
public boolean accept(File dir, String filename) {
return filename.endsWith("-release");
}
});
}
//looks for the version file (not all linux distros)
File fileVersion = new File("/proc/version");
if(fileVersion.exists()){
fileList = Arrays.copyOf(fileList,fileList.length+1);
fileList[fileList.length-1] = fileVersion;
}
//prints all the version-related files
for (File f : fileList) {
try {
BufferedReader myReader = new BufferedReader(new FileReader(f));
String strLine = null;
while ((strLine = myReader.readLine()) != null) {
System.out.println(strLine);
}
myReader.close();
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
}
}
Process
和BufferedReader
的东西都简单。 - Andrew Mao/etc/*-release
文件的内容。它会给你类似于CentOS release 6.3 (Final)
的东西。uname -r
并获取结果;这通常会显示发行版,除非它是由某个人从源代码在他的地下室编译的。对于我的机器:mao@korhal ~ $ uname -r
3.4.9-gentoo
并运行它:
Process p = Runtime.getRuntime().exec("uname -r");
BufferedReader in = new BufferedReader(
new InputStreamReader(p.getInputStream()));
String distro = in.readLine();
// Do something with distro and close reader
编辑:也许对于大多数发行版来说,uname -a
更适合这里。或者查看 /etc/*-release
文件,在大多数情况下都有定义。
2.6.38-13-server
;) - Brian Roachos.version
相同。 - Haseena
os.version
。我正在运行Windows,不确定在*nix上会返回什么。 - Andrew Thompson