Java 输入/输出——Java虚拟机读写其它进程的数据
使用 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虚拟机读写其它进程的数据的更多相关文章
- Java虚拟机读写其他进程的数据--Process对象
使用Runtime对象的exec()方法可以运行平台上的其他程序,该方法产生一个Process对象,Process对象代表由该Java程序启动的子进程. Process类提供了3个方法,用于让程序和其 ...
- Java 输入/输出 反射
Java 输入/输出 反射 输入输出和反射 一.数据流的基本概念 流一般分为 ( Input Stream ) 和输出流 ( Output Stream ) 两类,但这种划分并不是绝对的.比如一 ...
- Java输入/输出教程
Java输入/输出(I/O)处理从源读取数据并将数据写入目标.通常,读取存储在文件中的数据或使用I/O将数据写入到文件中. java.io和java.nio包中包含处理输入/输出的Java类.java ...
- Java虚拟机访问读写其他进程的数据--RandomAccessFile
RandomAccessFile 是Java输入/输出流体系中功能最丰富的文件内容访问类,它提供了众多的方法来访问文件内容,它既可以读取文件内容,也可以向文件输出数据.并且它支持“任意访问”的方式,程 ...
- Java 输入/输出——处理流(RandomAccessFile)
RandomAccessFile是Java输入/输出流体系中功能最丰富的文件内容访问类,它提供了众多的方法来访问文件内容,它既可以读取文件内容,也可以向文件输出数据.与普通的输入/输出流不同的是,Ra ...
- Java 输入/输出——重定向标准输入/输出
在System类中提供了如下三个重定向标准输入/输出方法. static void setErr(PrintStream err) Reassigns the "standard" ...
- Java 输入/输出——处理流(BufferedStream、PrintStream、转换流、推回输入流)
关于使用处理流的优势,归纳起来就是两点:(1)对于开发人员来说,使用处理流进行输入/输出操作更简单:(2)使用处理流执行效率更高. 1.BufferedInputStream/BufferedOutp ...
- JAVA输入/输出系统中的其他流学习笔记
一.字节数组流 字节数组流类能够操作内存中的字节数组,它的数据是一个字节数组.字节数组流类本身适配器设计模式,它把字节数组类型转为流类型使得程序能够对字节数组进行读写操作. 1.ByteArrayIn ...
- Java 输入/输出——字节流和字符流
1.流的分类 (1)输入流和输出流(划分输入/输出流时是从程序运行所在内存的角度来考虑的) 输入流:只能从中读取数据,而不能向其写入数据. 输出流:只能向其写入数据,而不能从中读取数据. 输入流主要由 ...
随机推荐
- linux 下的emoji在MariaDB中的字符集修改
在此目录下修改这个文件: 添加一行字符集: 然后重启服务,就OK了
- 《CLR via C#》读书笔记 之 泛型
第十二章 泛型 2014-06-15 初始泛型 12.3 泛型基础结构 12.3.1 开放类型与封闭类型 12.3.2 泛型类型和继承 12.3.3 泛型类型同一性 12.3.4 代码爆炸 12.6 ...
- LeetCode: Next Permutation 解题报告
Next Permutation Implement next permutation, which rearranges numbers into the lexicographically nex ...
- YII页面显示trace
修改protected/config/main.php 'db'=>array( 'connectionString' => 'mysql:host=localhost;dbname=te ...
- 解决Android微信支付官方demo运行失败
Android微信支付官方demo运行失败,在此简单记录一下解决步骤 1.httpclient错误 官方给的demo是eclipse的,打开之后提示httpclient的错误,我知道在as下解决htt ...
- 转载:安装Ubuntu 15.10后要做的事
转载:安装Ubuntu 15.10后要做的事 原文转载于:http://blog.csdn.net/skykingf/article/details/45267517 Ubuntu 15.10发布了, ...
- 【转】WPF自定义控件与样式(3)-TextBox & RichTextBox & PasswordBox样式、水印、Label标签、功能扩展
一.前言.预览 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等. 本文主要是对文本输入控件进行样式开发,及相关扩展功能开发,主要内容包括: 基本文 ...
- Java开发中Maven Jar包管理建议
Jar包管理规范 基于使用Git做版本控制,使用Jenkins做持续集成,以及Git-flow分支管理策略的情况: 带-SNAPSHOT为快照版本,例如1.0.0-SNAPSHOT 正式发布版本只有版 ...
- MTK 修改默认时区
首先介绍应用程序修改 : AlarmManager mAlarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); mA ...
- 09观察者模式ObServer
一.什么是观察者模式 Observer模式是行为模式之一,它的作用是当 一个对象的状态发生变化时,能够自动通知其他 关联对象,自动刷新对象状态. Observer模式提供给关联对象一种同步通信的 手段 ...