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

为什么要避免在java中使用Runtime.exec()?,java,Java,我想从java在linux操作系统中执行一个shell命令。但是pmd报告说不要使用java Runtime.exec()。为什么?原因是什么?Runtime.exec()是否有其他选择?除非您停留在一个古老的JVM上,这样可以更容易地指定一个进程、设置它的环境、生成它并处理它的文件描述符 此类用于创建操作系统进程 每个ProcessBuilder实例管理一组流程属性。start()方法使用这些属性创建一个新的Process实例。可以从同一实例重复调用start()方法,以创建具有相同或相关属性

我想从java在linux操作系统中执行一个shell命令。但是pmd报告说不要使用java Runtime.exec()。为什么?原因是什么?Runtime.exec()是否有其他选择?

除非您停留在一个古老的JVM上,这样可以更容易地指定一个进程、设置它的环境、生成它并处理它的文件描述符

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

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

启动使用默认工作目录和环境的新进程很容易:

   Process p = Runtime.getRuntime().exec(command);
   is = p.getInputStream();
   byte[] userbytes = new byte[1024];
   is.read(userbytes);
下面是一个使用修改的工作目录和环境启动流程的示例:

 Process p = new ProcessBuilder("myCommand", "myArg").start();
ProcessBuilder pb=newprocessbuilder(“myCommand”、“myArg1”、“myArg2”);
Map env=pb.environment();
环境看跌期权(“VAR1”、“myValue”);
环境移除(“其他变量”);
环境put(“VAR2”,环境get(“VAR1”)+“后缀”);
目录(新文件(“myDir”);
进程p=pb.start();

pmd到底显示了什么消息?问题描述:不要使用Runtime.exec()执行命令这是一条荒谬的语句,没有任何支持避免执行Runtime.exec()方法的原因是什么。这有可能打针吗?谢谢,迈克。ProcessBuilder在我的案例中工作得非常出色。比使用Runtime.exec()容易得多。更多信息和示例,请访问
 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();