从java运行shell命令

我正在处理一个应用程序有一个关于从Java应用程序运行shell命令的问题。 这里是代码:

public String execRuntime(String cmd) { Process proc = null; int inBuffer, errBuffer; int result = 0; StringBuffer outputReport = new StringBuffer(); StringBuffer errorBuffer = new StringBuffer(); try { proc = Runtime.getRuntime().exec(cmd); } catch (IOException e) { return ""; } try { response.status = 1; result = proc.waitFor(); } catch (InterruptedException e) { return ""; } if (proc != null && null != proc.getInputStream()) { InputStream is = proc.getInputStream(); InputStream es = proc.getErrorStream(); OutputStream os = proc.getOutputStream(); try { while ((inBuffer = is.read()) != -1) { outputReport.append((char) inBuffer); } while ((errBuffer = es.read()) != -1) { errorBuffer.append((char) errBuffer); } } catch (IOException e) { return ""; } try { is.close(); is = null; es.close(); es = null; os.close(); os = null; } catch (IOException e) { return ""; } proc.destroy(); proc = null; } if (errorBuffer.length() > 0) { logger .error("could not finish execution because of error(s)."); logger.error("*** Error : " + errorBuffer.toString()); return ""; } return outputReport.toString(); } 

但是当我尝试执行命令如:

 /export/home/test/myapp -T "some argument" 

myapp将"some argument"看作是两个独立的论点。但我想把"some argument"看作是一个论点。 当我直接从terminal运行这个命令,它成功执行。 我尝试了'"some argument"'""some argument"""some\ argument"但是对我没有用。 我怎样才能把这个论点看作是一个论点。

我记得exec方法的重载提供了一个单独的参数参数。 你需要使用它

对。 就这个

 public Process exec(String[] cmdarray) throws IOException 

只需使命令行和所有参数分开string数组的元素

先做一个string
String cmd =“/ export / home / test / myapp -T”一些参数\“”;
然后在proc中运行cmd