你经常会需要在Java内部执行其他操作系统的程序,并且要控制这些程序的输入和输出。Java类库提供了执行这些操作的类。
要想运行一个程序,你需要向OSExecute.command()传递一个command字符串,它与你在控制台上运行改程序所键入的命令相同,这个命令被传递给java.lang.ProcessBuilder构造器(它要求这个命令作为一个String对象序列而被传递),然后所产生的ProcessBuilder对象被启动:
public class OSExecuteException extends RuntimeException{
public OSExecuteException (String why){super(why);}
}
public class OSExecute{
public static void command(String command){
boolean err=false;
try{
Process process=new ProcessBuilder(command.split(" ")).start();
BufferedReader reader=new BufferedReader(new InputStreamReader(process.getInputStream()));
String s;
while((s=reader.readLine())!=null)
System.out.println(s);
BufferedReader error=new BufferedReader(new InputStreamReader(process.getErrorStream()));
while((s=error.readLine())!=null){
System.err.println(s);
if(!err)
err=true;
}
}catch(Exception e){
if(!command.startsWith("CMD /C"))
command("CMD /C"+command);
else
throw new RuntimeException();
}
if(err)
throw new OSExecuteException ("Errors executing"+command)
}
}