java 外部类似_[求指点] 如何用java 实现类似linux中管道调用外部程序的功能
想寫個小程序實現類似linux中管道的功能,創建一個外部子進程,然后主進程不斷地寫輸入給子進程,而后把子進程的返回值取出。
如下的小代碼就是從stdin讀入一個字符串,調用子進程(cat)返回這個串,然后返回。
但下面的寫法只能正確返回一次,錯在哪里?
求好的解決方式。
import?java.io.BufferedWriter;
import?java.io.File;
import?java.io.InputStream;
import?java.io.InputStreamReader;
import?java.io.OutputStream;
import?java.io.OutputStreamWriter;
public?class?test?{
public?static?void?main(String[]?args)?{
try?{
Process?proc?=?Runtime.getRuntime().exec("cat");
OutputStream?os?=?proc.getOutputStream();
OutputStreamWriter?osw?=?new?OutputStreamWriter(os);
BufferedWriter?bw?=?new?BufferedWriter(osw);
InputStream?is?=?proc.getInputStream();
InputStreamReader?isr?=?new?InputStreamReader(is);
BufferedReader?br?=?new?BufferedReader(isr);
//InputStream?eis?=?proc.getErrorStream();
BufferedReader??stdin???=?new???BufferedReader(new?InputStreamReader(System.in));
System.out.print(?"Enter???a???line:?");
String?tmp=null;
while((tmp?=?stdin.readLine())?!=?null){
//??????????????System.out.println(tmp);
bw.write(tmp);
bw.write('\n');
bw.flush();
String?line=null;
while?(?(line?=?br.readLine())?!=?null)?{??//?dead?here,never?return?from?here
System.out.println(line);
}
int?retVal?=?proc.waitFor();
if?(retVal?!=?0)?{
String?msg?=?"failed,?return?value?=?"?+?retVal;
System.out.println(msg);
}
System.out.print(?"Enter???a???line:?");
}
}?catch?(Exception?ex)?{
ex.printStackTrace();
}
}
}
運行結果:
javac?test.java?&&?java?test
Enter???a???line:?hello
hello
fds
之后就死掉了。
總結
以上是生活随笔為你收集整理的java 外部类似_[求指点] 如何用java 实现类似linux中管道调用外部程序的功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 骨折多少钱啊?
- 下一篇: 已知编织袋9700一吨,58克,每条多少