使用 Runtime对象的exec()方法可以运行平台上的其它程序,该方法产生一个Process对象,Process对象代表由该Java程序启动的子进程。Process类提供了如下三个方法,用于让程序和其子进程进行通信。

abstract InputStream getErrorStream​()
Returns the input stream connected to the error output of the process.(获取子进程的错误流)
abstract InputStream getInputStream​()
Returns the input stream connected to the normal output of the process.(获取子进程的输入流)                                                                     
abstract OutputStream getOutputStream​()
Returns the output stream connected to the normal input of the process.(获取子进程的输出流)
 package com.zyjhandsome.io;

 import java.io.*;

 public class ReadFromProcess {

     public static void main(String[] args) throws IOException {
// 运行javac命令,返回运行该命令的子进程
// 使用Runtime启动了javac程序,获得了运行该程序对应的子进程
Process p = Runtime.getRuntime().exec("javac");
try {
// 以p进程的错误流创建BufferedReader对象
// 这个错误流对本程序是输入流,对p进行是输出流
BufferedReader br = new BufferedReader(new InputStreamReader(p.getErrorStream()));
String buff = null;
// 采取循环方式来读取p进程的错误输出
while ((buff = br.readLine()) != null)
{
System.out.println(buff);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

  不仅如此,也可以通过Process的getOutputStream()方法获得向进程输入数据的流(该进程对Java程序是输出流,对子进程是输入流),如下程序实现了在Java程序中启动Java虚拟机运行另一个 Java程序,并向另一个Java程序中输入数据。

 package com.zyjhandsome.io;

 import java.io.*;
import java.util.*; public class WriteToProcess { public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
// 运行java ReadStandard命令,返回运行该命令的子进程
Process p = Runtime.getRuntime().exec("java ReadStandard");
// 以p进程的输出流创建PrintStream对象
// 这个输出流对本程序是输出流,对p进程则是输入流
try {
PrintStream ps = new PrintStream(p.getOutputStream());
// 向ReadStandard程序写入内容,这些内容将被ReadStandard读取
ps.println("普通字符串");
ps.println(new WriteToProcess()); } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} //定义一个ReadStandard类,该类可以接受标准输入,
//并将标准输入写入out.txt文件。
class ReadStandard
{
public static void main(String[] args)
{
try(
// 使用System.in创建Scanner对象,用于获取标准输入
Scanner sc = new Scanner(System.in);
PrintStream ps = new PrintStream(new FileOutputStream("D:\\User_zhaoyingjun\\JavaSE\\Test\\WriteToProcess.txt")))
{
// 增加下面一行将只把回车作为分隔符
sc.useDelimiter("\n");
// 判断是否还有下一个输入项
while(sc.hasNext())
{
// 输出输入项
ps.println("键盘输入的内容是:" + sc.next());
}
}
catch(IOException ioe)
{
ioe.printStackTrace();
}
}
}

Java 输入/输出——Java虚拟机读写其它进程的数据的更多相关文章

  1. Java虚拟机读写其他进程的数据--Process对象

    使用Runtime对象的exec()方法可以运行平台上的其他程序,该方法产生一个Process对象,Process对象代表由该Java程序启动的子进程. Process类提供了3个方法,用于让程序和其 ...

  2. Java 输入/输出 反射

    Java  输入/输出   反射 输入输出和反射 一.数据流的基本概念 流一般分为 ( Input Stream ) 和输出流 ( Output Stream ) 两类,但这种划分并不是绝对的.比如一 ...

  3. Java输入/输出教程

    Java输入/输出(I/O)处理从源读取数据并将数据写入目标.通常,读取存储在文件中的数据或使用I/O将数据写入到文件中. java.io和java.nio包中包含处理输入/输出的Java类.java ...

  4. Java虚拟机访问读写其他进程的数据--RandomAccessFile

    RandomAccessFile 是Java输入/输出流体系中功能最丰富的文件内容访问类,它提供了众多的方法来访问文件内容,它既可以读取文件内容,也可以向文件输出数据.并且它支持“任意访问”的方式,程 ...

  5. Java 输入/输出——处理流(RandomAccessFile)

    RandomAccessFile是Java输入/输出流体系中功能最丰富的文件内容访问类,它提供了众多的方法来访问文件内容,它既可以读取文件内容,也可以向文件输出数据.与普通的输入/输出流不同的是,Ra ...

  6. Java 输入/输出——重定向标准输入/输出

    在System类中提供了如下三个重定向标准输入/输出方法. static void setErr​(PrintStream err) Reassigns the "standard" ...

  7. Java 输入/输出——处理流(BufferedStream、PrintStream、转换流、推回输入流)

    关于使用处理流的优势,归纳起来就是两点:(1)对于开发人员来说,使用处理流进行输入/输出操作更简单:(2)使用处理流执行效率更高. 1.BufferedInputStream/BufferedOutp ...

  8. JAVA输入/输出系统中的其他流学习笔记

    一.字节数组流 字节数组流类能够操作内存中的字节数组,它的数据是一个字节数组.字节数组流类本身适配器设计模式,它把字节数组类型转为流类型使得程序能够对字节数组进行读写操作. 1.ByteArrayIn ...

  9. Java 输入/输出——字节流和字符流

    1.流的分类 (1)输入流和输出流(划分输入/输出流时是从程序运行所在内存的角度来考虑的) 输入流:只能从中读取数据,而不能向其写入数据. 输出流:只能向其写入数据,而不能从中读取数据. 输入流主要由 ...

随机推荐

  1. vue的双向绑定

    1.效果 点击+-修改数量,金额跟着一起变动 2.index.html <!DOCTYPE html> <html lang="en"> <head& ...

  2. 按enter键触发登录事件

    $(document).keydown(function(event){ if(event.keyCode==13){ $(".submit").click(); } });

  3. 项目中遇到的IE8浏览器访问页面过慢问题

    我目前所做的项目,由于一些控件的特殊需求,建议客户使用IE8浏览器,在测试一段时间之后,客户突然提出,IE8访问我们的系统时,界面加载非常缓慢.排查过服务器性能.网络连接等情况之后,在360浏览器访问 ...

  4. [转]bootstrap table 动态列数

    原文地址:https://my.oschina.net/u/2356355/blog/1595563 据说bootstrap table非常好用,从入门教程中了解到它的以下主要功能: 由于固定表头意味 ...

  5. 【九天教您南方cass 9.1】 09 提取坐标的几种方法

    同学们大家好,欢迎收看由老王测量上班记出品的cass9.1视频课程 我是本节课主讲老师九天. 我们讲课的教程附件也是共享的,请注意索取测量空间中. [点击索取cass教程]5元立得 (给客服说暗号:“ ...

  6. AtomicLong.lazySet 是如何工作的?

    原文:http://www.quora.com/Java-programming-language/How-does-AtomicLong-lazySet-work Jackson Davis说:为一 ...

  7. Navi.Soft31.微信WinForm框架(含下载地址)

    1.概述 1.1应用场景 微信的出现,改变了我们日常生活.而微信公众平台的出现,使我们每个人都可能成为一个品牌,微商的普及.微店越来越多.越来越多的人,借助微信公众平台,实现了自己的梦想 在此背景环境 ...

  8. Spark学习笔记——基于MLlib的机器学习

    使用MLlib库中的机器学习算法对垃圾邮件进行分类 分类的垃圾邮件的如图中分成4个文件夹,两个文件夹是训练集合,两个文件夹是测试集合 build.sbt文件 name := "spark-f ...

  9. swoole web服务

    web.php <?php $http = ); $http->on('request', function ($request, $response) { var_dump($reque ...

  10. vue图片放大镜效果

    原作者地址:https://github.com/lemontree2000/vue-magnify 经测试,原插件在使用时有bug,即在预览时进行鼠标滚动,导致遮罩层计算错误.我已修复该bug,特分 ...