从 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 中,它打印如下: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());
}
}
从这里开始,我扩展了代码以包含不同的回退方案,以便在多个平台上获得操作系统版本。
获取 Linux 发行版名称的一种特别方法是读取/etc/*-release
文件的内容。它会给你类似的东西CentOS release 6.3 (Final)
。
从 Java 中读取该文件的内容是直截了当的。
可能不是最好的方法,但它会完成工作,这也只适用于 *nix 盒子而不是 Windows。
可以用java运行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
文件,这似乎是在大多数将军身上普遍定义的。