您的位置:首页 > 职场人生

黑马程序员-JAVA学习第7课-Java程序与其它进程的数据通信

2011-05-25 00:03 453 查看
在Java程序中可以用Process类的实例对象来表示子进程,子进程的标准输入秋输出不再连接到键盘和显示器,而是以管道流的形式连接到父进程的一个输出流和输入流。
调用Process类的getOutputStream和getInputStream方法可以获得连接到子进程的输出流和输入流对象。
 
编程实例:在TestInOut类中启动java.exe命令执行另一个MyTest类,TestInOut和MyTest通过进程间的管道相互传递数据。
 
=================================================
MyTest.java
import java.io.*;
public class MyTest {
 
 /**
  * Method main
  *
  *
  * @param args
  *
  */
 public static void main(String[] args) throws Exception {
  // TODO: 在这添加你的代码
  BufferedReader bfr=new BufferedReader (
    new InputStreamReader(System.in));
  
  while(true)
  {
   String strLine=bfr.readLine();
   if (strLine!=null)
    System.out.println("hi:"+strLine);
   else
    break;
   
  } 
 }
}
//---------------------------------------------
TestInOut.java
 
import java.io.*;
public class TestInOut implements Runnable {
 Process p=null;
 
 public TestInOut()
 {
  try{
  
  p=Runtime.getRuntime().exec("java MyTest");
  new Thread(this).start();
  }catch(Exception e){
   e.printStackTrace() ;
  }
 }
 /**
  * Method main
  *
  *
  * @param args
  *
  */
 public static void main(String[] args) {
  // TODO: 在这添加你的代码
  TestInOut tio=new TestInOut();
  tio.send();
 }
 /**
  * Method run
  *
  *
  */
  public void send() //发送给子进程数据
  {
   try{
   // int count=0;
   OutputStream ops=p.getOutputStream();
    while(true)
    {
     //System.out.println(++count);
     ops.write("help/r/n".getBytes());
    }
   }catch (Exception e){
    e.printStackTrace();
    }
  }
 public void run() 
 {
  try{  
   InputStream in=p.getInputStream();
   BufferedReader bfr=new BufferedReader(
    new InputStreamReader(in));
   while(true)
   {
   
    String strLine=bfr.readLine();
    
    if(strLine!=null)
    {
       
     System.out.println(strLine);
    }
    else
    { break;}
    
    
   }
  }catch(Exception e)
  {
    e.printStackTrace() ;
  }
 }
}
 
记住调用Process类的destroy方法结束子进程的运行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息