15
   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() 有什么替代方案吗?

4

1 回答 1

38

除非您被困在一个古老的 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();
于 2012-05-23T15:40:23.413 回答