java调用linux命令该如何实现?

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

推荐阅读:

linux关机命令是指什么?都有哪些常用的关机命令?

linux查看进程命令有哪些方式?

linux查看redis版本怎么操作?具体示例