使用Runtime对象的exec()方法可以运行平台上的其他程序,该方法产生一个Process对象,Process对象代表由该Java程序启动的子进程。
Process类提供了三个方法用于让程序和子进程进行通信。
InputStream getErrorStream():获取子进程的错误流
InputStream getInputStream():获取子进程的输入流
OutputStream getOutputStream():获取子进程的输出流
demo:
class="java">public class WriteToProcess {
public static void main(String[] args) throws IOException {
//运行java ReadStandard命令,返回运行该命令的子进程
Process p = Runtime.getRuntime().exec("java ReadStandard");
try {
//以p进程的输出流创建PrintStream对象
PrintStream ps = new PrintStream(p.getOutputStream());
// BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// String st;
// while((st = br.readLine()) != null) {
// ps.println(st);
// }
//将被写入到java ReadStandard程序的内容
ps.println("Hello, 我是WriteProcess中的字符串");
ps.println(new WriteToProcess());
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class ReadStandard {
public static void main(String[] args) {
try {
//获取标准输入,即之前WriteToProcess程序中被写入到输出流里的内容
Scanner sc = new Scanner(System.in);
PrintStream ps = new PrintStream(new FileOutputStream("out.txt"));
{
sc.useDelimiter("\n");
while (sc.hasNext()) {
ps.println("键盘输入的内容是:" + sc.next());
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
上面ReadStandard类中使用了Scanner获取标准输入,并提供main方法来执行,但我们不需要直接运行该类,而是通过运行WriteToProcess类来运行ReadStandard,在WriteToProcess中通过执行exec方法运行了java ReadStandard命令,该命令将会运行ReadStandard类,并返回运行该类的子进程,我们通过获取该子进程的输出流然后往里面写内容,这部分内容将作为ReadStandard类中标准输入获取的内容
(在运行WriteToProcess之前要先运行ReadStandard得到ReadStandard.class文件哦)