2012-05-23 31 views
13
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()有没有其他选择?为什么要避免在java中使用Runtime.exec()?

+2

pmd什么消息正好显示? – Tudor

+0

问题描述:不要使用Runtime.exec()来执行 执行命令 – kannanrbk

+1

这是一个荒谬的说法,绝对没有后盾 – ControlAltDel

回答

33

除非您被困在古老的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(); 
+1

谢谢迈克。 ProcessBuilder在我的案例中表现出色。比使用Runtime.exec()更容易。更多信息和示例,请访问http://docs.oracle.com/javase/6/docs/api/java/lang/ProcessBuilder.html – tremendows

相关问题