- 8
- 0
- 约2.34千字
- 约 4页
- 2021-04-13 发布于天津
- 举报
Java调用外部程序解决方案
并希关键字 Java 外部程序 CMD 进程 调用 Process
并希
最近接触一个需求, 是利用Java调用本地命令行程序, 望Java程序能与该命令行程序进行交互,Java对该程序的操 作如同在终端中对程序的操纵一样。
在技术调研的过程中,遇到了几个问题: 如何 Java 调用命令行程序 如何利用Java向命令行程序的标准输入写入字符流 如何利用Java即时地得到命令行程序的标准输出流。
如何利用Java即时地得到命令行程序的标准错误流
、调用命令行程序 这个很简单,Java调用的方法为
Process process =
Runtime.getRuntime().exec(#8220;command name#8221;);
Process 的 JavaDoc 地址:
/j2se/1.4.2/docs/api/java/lang/Process.html
、标准输出 注意,在这里标准输出指的是 Java程序以标准输出的方式发
出字节流,这些字节流会以标准输入的方式进入被调用的命
令行程序
OutputStream pOutputStream = process.getOutputStream();
PrintWriter outputWriter = new PrintWriter(pOutputStream, true);
outputWriter.print(string);
Printwriter的第二个构造参数一定要选为 true,这样才能自
动 flush 进入外部程序,不然,没有 Flush ,你向被调用程序 所写的输入,只有在下一次缓冲被 Flush 的时候才能发挥作 用,这样,当你的输入很少时, 你虽然在代码里 print 了命令, 但是外部程序并没有得到他,就一直阻塞,这是开发者经常 会遇到的问题。
三、标准输入和错误输入
private InputStream pErrorStream = process.getErrorStream();
private InputStream pInputStream =process.getInputStream();
这两个输入是用来接受外部程序的反馈的,外部程序通常会 向标准终端打印字符,这些字符会通过这两个流得到,经过 测试,我们发现一个问题,如果外部程序在输出信息时,没 有用 flush 也会出现问题,比如 C 语言的程序
scanf(#8220;%d#8221;, amp;i);
printf(#8220;%d#8221;, i);
这段代码在运行时,虽然在终端里会即时的显示出来,但是 却不能及时地发送给 pInputStream ,这是因为程序输出使用
i));
i));
了缓冲机制造成的,所以,这造成的困难是如果你没有外部 程序的源码,你就很难将输出即时显示出来,我目前还没有 找到解决方案,如果你有源码就好办了,在源码中设置输出 为即时 flush 就好了,我用笨办法来说明:
scanf(#8220;%d#8221;, amp;i);
printf(#8220;%d#8221;, i);
fflush(stdout);
这样, fflush(stdout) 之后, pInputStream 就会得到输入了。
四、综合
面我们用三个线程来进行一个简单的与外部程序的交互 过程的设计 线程一、
process.waitFor() ,负责建立线程并等待线程结束 线程二、
for (int i = 0; i gt; -1; i = pInputStream.read(inBuffer)) {
// We have a new segment of input, so
process it as a String..
System.out.print(new String(inBuffer, 0,
负责接收外部程序的输出信息 线程三、
// Read the ErrorStream in a loop until we
find no more bytes to read..
for (int i = 0; i gt; -1; i =
pErrorStream.read(errBuffer)) {
// We have a new segment of error, so
process it as a String..
Systerm.err.print(new String(errBuffer,
0, i));
负责接收外部程序的错误输出信息 在适当的地方,调用 outputWriter.print(string); 向程序写入字 符流。
推荐参考资料
/KB/java/ProcessHelper.aspx?disp
您可能关注的文档
最近下载
- 湖北襄阳宜城市千和百货店(烟花爆竹零售店)重大事故案例培训稿.docx VIP
- 基本建设工程竣工财务决算审核报告模板.docx VIP
- 国际商务礼仪(新形态一体化教材) 商务宴请礼仪 第四章 商务宴请礼仪20181211.pptx VIP
- DBJ41∕T 255-2021 分片预制混凝土装配式综合管廊结构技术标准.pdf
- 国际商务礼仪(新形态一体化教材) 商务交往礼仪 第三章 商务交往礼仪20181211.pptx VIP
- 广西武宣县盘龙铅锌矿剖析.PDF VIP
- 集中供热管网热损失实测分析.pdf VIP
- TCIAPS 0025-2023电池行业能效对标实施指南第2部分电池产品.pdf VIP
- 北京中医药大学中西医结合内科学2016年考博真题试卷.pdf VIP
- 《国际商务礼仪》课件 第二章 商务会议礼仪.pptx VIP
原创力文档

文档评论(0)