在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常见问题及解决方法可以关注我们官网了解详情。
推荐阅读: