从java开始,我得到了Iam工作的名字。见下面的代码:
System.out.println(System.getProperty("os.name"));
在Windows XP中,它打印如下:Windows XP
但是在ubuntu / fedora中,它只显示Linux
。
任何人都可以帮我找到使用java代码的Iam使用的linux版本(比如ubuntu或fedora)吗?是否可以从java中找到linux发行版?
答案 0 :(得分:4)
此代码可以帮助您:
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());
}
}
答案 1 :(得分:4)
从这开始,我扩展代码以包含不同的回退场景,以便在多个平台上获得操作系统版本
答案 2 :(得分:0)
获取Linux发行版名称的一种特殊方式是阅读/etc/*-release
文件的内容。它会给你CentOS release 6.3 (Final)
之类的东西。
从Java读取该文件的内容是直截了当的。
可能不是最好的方法,但它会完成工作,也只能在* nix框上工作而不能在Windows上工作。
答案 3 :(得分:0)
您可以使用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
文件,这些文件似乎通常在大多数将军身上定义。