java 可以调用操作系统上可以执行的命令
调用方式一:
Process process = Runtime.getRuntime().exec(new String []{"ping","127.0.0.1" }, null,null);
.exec方法:
public Process exec(String cmdarray[], String[] envp, File dir)
参数: cmdarray 命令及参数组成的数组:可执行的命令字符串,用空格分隔而生成的数组
envp 每一个元素为一个环境变量,每个元素格式 :变量名=变量值
dir 指定子进程的工作目录
实际是调用 ProcessBuilder 实现的,源码:
public Process exec(String[] cmdarray, String[] envp, File dir)
throws IOException {
return new ProcessBuilder(cmdarray)
.environment(envp)
.directory(dir)
.start();
}
调用方式二:
ProcessBuilder processBuilder = new ProcessBuilder(List<String> command);//命令及参数组成LIST
processBuilder.environment().put("变量名","变量值");//设置环境变量
processBuilder.directory("工作目录");//指定子进程的工作目录
processBuilder.start();//启动子进程。
上面两种方式,创建一个本机进程来执行命令,并返回 Process
子类的一个实例,表示执行命令的进程。
Process
方法:
abstract void | destroy() 杀掉子进程。 |
abstract int | exitValue() 返回子进程的退出代码。 0正常结束 |
abstract InputStream | getErrorStream() 获取子进程的标准错误流(stderr)。 |
abstract InputStream | getInputStream() 获取子进程的标准输入流(stdout )。 |
abstract OutputStream | getOutputStream() 获取子进程的标准输出流(stdin)。 |
abstract int | waitFor() 导致当前线程等待,一直要等到由该 Process 对象表示的进程已经终止。并返回进程的退出代码, 0正常结束。 |
某些平台为进程的输出流提供有限的缓冲区大小,当缓冲区满时,可能导至进程阻塞甚至死锁。
因此即使不需要进程的输出,最好也把输出流读出来,避免缓冲区满导至进程阻塞。
Process 使用的方式:
1.读取标准输出流和标准错误输出流
2.调用waitFor 方法等待进程结束,并获得进程退出码,根据退出码判读进程是否正常结束。