当你需要在Java内部执行其他操作系统的程序,并且要控制这些程序的输入和输出,一项常见任务是运行程序,并将产生的输出发送到控制台。
代码例子:
//自定义异常
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 results = new BufferedReader(
new InputStreamReader(process.getInputStream()));
String s;
while((s = results.readLine())!= null)
System.out.println(s);
//获得进程错误输入流
BufferedReader errors = new BufferedReader(
new InputStreamReader(process.getErrorStream()));
while((s = errors.readLine())!= null) {
System.err.println(s);
err = true;
}
} catch(Exception e) {
//windows2000 命令符
if(!command.startsWith("CMD /C"))
command("CMD /C " + command);
else
throw new RuntimeException(e);
}
if(err)
throw new OSExecuteException("Errors executing " +
command);
}
}
//执行函数
public class OSExecuteDemo {
public static void main(String[] args) {
//反编译class文件
OSExecute.command("javap D:/AndroidProject/thinking18/bin/beyondboy/OSExecuteDemo.class");
}
}
运行结果:
Compiled from “OSExecuteDemo.java”
public class beyondboy.OSExecuteDemo {
public beyondboy.OSExecuteDemo();
public static void main(java.lang.String[]);
}