在Linux里如何调用java相信大家都知道,但在java里调用Linux命令要如何编写小伙伴们知道吗?本篇文章小编就带大家了解了解。
例:public String executeLinuxCmd(String cmd)
{
System.out.println("got cmd job : " + cmd);
Runtime run = Runtime.getRuntime();
try
{
Process process = run.exec(cmd);
InputStream in = process.getInputStream();
BufferedReader bs = new BufferedReader(new InputStreamReader( in ));
// System.out.println("[check] now size \n"+bs.readLine());
StringBuffer out = new StringBuffer();
byte[] b = new byte[8192];
for (int n;
(n = in .read(b)) != -1;)
{
out.append(new String(b, 0, n));
}
System.out.println("job result [" + out.toString() + "]"); in .close();
// process.waitFor();
process.destroy();
return result;
}
catch (IOException e)
{
e.printStackTrace();
}
return null;
}
可以看到,在Java中我们几乎能够通过 Runtime 调用所有Linux命令,它的一般调用形式如下:
Runtime.getRuntime().exec(command)
但是有个问题,在这样执行时它是没有任何输出的,因为调用 Runtime.exec
方法将产生一个本地的进程,并返回一个Process子类的实例(注意:Runtime.getRuntime().exec(command)返回的是一个Process类的实例)这个实例可用于控制进程或取得进程的相关信息。
因为是调用的 Runtime.exec 方法所创建的子进程没有自己的终端或控制台,因此该子进程的标准IO(如stdin,stdou,stderr)都通过
Process.getOutputStream(),Process.getInputStream(), Process.getErrorStream()
方法重定向给它的父进程了。
所以用户就需要用这些stream来向子进程输入数据或获取子进程的输出,代码如下:try
{
String[] cmd = new String[]
{
”
/bin/sh”,
“-c”,
”ls“
};
Process ps = Runtime.getRuntime()
.exec(cmd);
BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
StringBuffer sb = new StringBuffer();
String line;
while ((line = br.readLine()) != null)
{
sb.append(line)
.append(”\n”);
}
String result = sb.toString();
System.out.println(result);
}
catch (Exception e)
{
e.printStackTrace();
}
以上就是今天的全部内容,更多相关java常见问题及解决方法可以关注我们官网了解详情。
推荐阅读: