使用Runtime对象的exec()方法可以运行平台上的其他程序,该方法产生一个Process对象,Process对象代表由该Java程序启动的子进程。
Process类提供了三个方法用于让程序和子进程进行通信。
InputStream getErrorStream():获取子进程的错误流
InputStream getInputStream():获取子进程的输入流
OutputStream getOutputStream():获取子进程的输出流
demo:
public class WriteToProcess {
public static void main(String[] args) throws IOException {
//运行java ReadStandard命令,返回运行该命令的子进程
Process p = Runtime.getRuntime().exec("java ReadStandard");
try {
//以p进程的输出流创建PrintStream对象
PrintStream ps = new PrintStream(p.getOutputStream());
// BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// String st;
// while((st = br.readLine()) != null) {
// ps.println(st);
// }
//将被写入到java ReadStandard程序的内容
ps.println("Hello, 我是WriteProcess中的字符串");
ps.println(new WriteToProcess());
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class ReadStandard {
public static void main(String[] args) {
try {
//获取标准输入,即之前WriteToProcess程序中被写入到输出流里的内容
Scanner sc = new Scanner(System.in);
PrintStream ps = new PrintStream(new FileOutputStream("out.txt"));
{
sc.useDelimiter("\n");
while (sc.hasNext()) {
ps.println("键盘输入的内容是:" + sc.next());
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
上面ReadStandard类中使用了Scanner获取标准输入,并提供main方法来执行,但我们不需要直接运行该类,而是通过运行WriteToProcess类来运行ReadStandard,在WriteToProcess中通过执行exec方法运行了java ReadStandard命令,该命令将会运行ReadStandard类,并返回运行该类的子进程,我们通过获取该子进程的输出流然后往里面写内容,这部分内容将作为ReadStandard类中标准输入获取的内容
(在运行WriteToProcess之前要先运行ReadStandard得到ReadStandard.class文件哦)
分享到:
相关推荐
Java虚拟机并发编程是Java开发中的重要组成部分,它涉及到多线程、同步机制、线程池等关键概念,是高效利用系统资源、提高程序响应速度的关键技术。在Java环境中,并发编程可以帮助开发者创建能够同时执行多个任务的...
##### Java虚拟机读写其他进程的数据 利用管道流(`PipedInputStream`与`PipedOutputStream`)和Socket通信,Java程序可以实现进程间的数据传输,从而读写其他进程产生的数据。 通过深入理解Java IO的核心概念和...
- **Java虚拟机读写其他进程的数据**:在某些场景下,需要让一个Java进程读取或写入另一个进程的数据。这可以通过使用管道流(`PipedInputStream` 和 `PipedOutputStream`)来实现,这些流可以在两个进程之间建立...
学生提问:不是说JVM是运行Java程序的虚拟机吗?那JRE和JVM的关系是怎样的呢? 8 学生提问:为什么不安装公共JRE系统呢? 9 1.4.2 设置PATH环境变量 10 学生提问:为什么选择设置用户变量,用户变量和系统变量有...
- **Java跨平台原理**:Java的跨平台特性主要得益于字节码文件(`.class`文件)和Java虚拟机(JVM)。Java程序编译成字节码文件后,由不同平台上的JVM解释执行这些字节码文件,从而实现了“一次编写,到处运行”的...
但是通过Java虚拟机,开发者只需要编写一次代码并编译为字节码形式,就可以在任何支持Java虚拟机的平台上运行。这种方式极大地简化了跨平台开发的过程,并降低了维护成本。 ##### 2.2 Dalvik虚拟机的起源 Dalvik...
为了使模拟的程序运行,可能还需要包含一个简单的解释器或虚拟机,能够执行Java字节码。 以上这些知识点构成了一个完整的Java模拟操作系统的基本框架。通过这样的模拟项目,开发者可以深入理解操作系统的工作原理...
在开发这个任务管理器时,Java的跨平台性使得程序可以在不同操作系统上运行,只需一个JVM(Java虚拟机)支持。此外,Java提供了丰富的类库和API,使得开发者能够方便地实现进程管理、UI设计等功能。 在实现过程中,...
本项目主要关注如何使用Sigar库在Java环境下获取系统信息,特别是内存、磁盘和JVM虚拟机的相关数据。 一、获取系统内存信息 在Java中使用Sigar库获取系统内存信息,主要涉及以下几个方面: 1. **总内存**:通过`...
首先,Java不直接支持原生的多进程编程,因为Java虚拟机(JVM)是单进程的。然而,Java可以通过与其他语言(如C++)的互操作,或者利用操作系统级别的进程间通信(IPC)机制来实现多进程通信。其中一种常见的方式是...
JVM(Java虚拟机)是运行Java字节码的虚拟机进程。它将内存划分为若干个不同的数据区域,具体包括程序计数器、虚拟机栈、本地方法栈、堆、方法区等。 2.2.1 程序计数器 程序计数器是线程私有的,记录了线程执行的...
理解如何使用File类,以及InputStream、OutputStream、Reader、Writer及其子类,对于读写文件和其他数据源非常有用。 6. **多线程**:Java提供了内置支持进行并发编程,包括Thread类和Runnable接口。学习如何创建和...
- JRE(Java Runtime Environment):Java运行时环境,它提供了Java虚拟机(JVM)以及Java核心类库等用于运行Java应用的环境。JRE是执行Java程序所必需的环境,它能够运行所有的Java应用程序。 - JVM(Java ...
Java内存模型(Java Memory Model, JMM)是Java虚拟机(JVM)的一部分,用于规定程序中的各种变量(包括实例字段、静态字段和数组元素等)在多个线程共享内存中的读写行为。JMM的主要目的是确保所有线程能够看到一致...
3. **运行时的编码转换**:Java虚拟机(JVM)在执行`.class`文件时,会将其中的Unicode编码内容解码为对应的本地编码格式进行显示。这一过程需要根据不同的运行环境进行适当的编码转换配置,以确保文本内容能够正确...
jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...
jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...
jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...
jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...
jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...