为什么要避免在java中使用Runtime.exec()?

时间:2012-05-23 15:37:29

标签: java

   Process p = Runtime.getRuntime().exec(command);
   is = p.getInputStream();
   byte[] userbytes = new byte[1024];
   is.read(userbytes);

我想在java的linux os中执行shell命令。但pmd报告说不要使用java Runtime.exec()。为什么?是什么原因 ? Runtime.exec()还有其他选择吗?

1 个答案:

答案 0 :(得分:36)

除非你被困在一个古老的JVM上,否则java.lang.ProcessBuilder可以更容易地指定一个进程,设置它的环境,生成它并处理它的文件描述符。

  

此类用于创建操作系统进程。

     

每个ProcessBuilder实例管理一组进程属性。 start()方法使用这些属性创建新的Process实例。可以从同一实例重复调用start()方法,以创建具有相同或相关属性的新子进程。

     

...

     

启动使用默认工作目录和环境的新流程很简单:

 Process p = new ProcessBuilder("myCommand", "myArg").start();
     

以下是使用修改后的工作目录和环境启动流程的示例:

 ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");
 Map<String, String> env = pb.environment();
 env.put("VAR1", "myValue");
 env.remove("OTHERVAR");
 env.put("VAR2", env.get("VAR1") + "suffix");
 pb.directory(new File("myDir"));
 Process p = pb.start();