Java.lang.Process需要注意的问题
来源:互联网 发布:淘宝店铺号可以修改吗 编辑:程序博客网 时间:2024/05/21 14:49
Java中执行本地命令的接口方法有两种,一种是java.lang.Runtime获取Runtime环境执行exec方法,另一种是通过创建java.lang.ProcessBuilder实例,执行command方法,这两种方法都能创建Process对象获取Input、Output、Error流与本地进程通信。
java.lang.ProcessBuilder是Jdk 1.5中新添加的一个类,J2SE 1.5之前,都是由java.lang.Runtime来实现进程的控制管理。
无论通过哪种方法创建,都是获取了Process对象,但是ProcessBuilder可以通过redirectErrorStream(true)把错误流合并到InputStream流中。一般命令执行成功后,会从inputstream中输出,但在Windows操作系统上执行本地java命令,成功后从ErrorStream流输出,因此需要通过redirectErrorStream将ErrorStream合并到Inputstream中去。
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Arrays;public class TestRuntime { public static void main(String[] args) throws IOException { Process process=Runtime.getRuntime().exec(args); exeProcess(process); System.out.println("===============ProcessBuilder redirectErrorStream(false)======================"); Process process2= new ProcessBuilder().redirectErrorStream(false).command(Arrays.asList(args)).start(); exeProcess(process2); System.out.println("===============ProcessBuilder redirectErrorStream(true)======================"); Process process3= new ProcessBuilder().redirectErrorStream(true).command(Arrays.asList(args)).start(); exeProcess(process3); } public static void exeProcess(Process process) throws IOException { BufferedReader isr=new BufferedReader(new InputStreamReader(process.getInputStream())); String line=""; while((line=isr.readLine())!=null) { System.out.println(line); } BufferedReader isr1=new BufferedReader(new InputStreamReader(process.getErrorStream())); String line1=""; while((line1=isr1.readLine())!=null) { System.out.println("error:"+line1); } process.destroy(); }}
以上代码在eclipse中调试运行后为:
error:java version "1.8.0_45"
error:Java(TM) SE Runtime Environment (build 1.8.0_45-b15)
error:Java HotSpot(TM) Client VM (build 25.45-b02, mixed mode, sharing)
===============ProcessBuilder redirectErrorStream(false)======================
error:java version "1.8.0_45"
error:Java(TM) SE Runtime Environment (build 1.8.0_45-b15)
error:Java HotSpot(TM) Client VM (build 25.45-b02, mixed mode, sharing)
===============ProcessBuilder redirectErrorStream(true)======================
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b15)
Java HotSpot(TM) Client VM (build 25.45-b02, mixed mode, sharing)
在Cmd模式下运行runnable jar为
Microsoft Windows [版本 6.2.9200]
(c) 2012 Microsoft Corporation。保留所有权利。
C:\Users\lili>cd c:\test
c:\test>java -jar newProcessTest.jar java -version
error:java version "1.8.0_45"
error:Java(TM) SE Runtime Environment (build 1.8.0_45-b15)
error:Java HotSpot(TM) Client VM (build 25.45-b02, mixed mode)
===============ProcessBuilder redirectErrorStream(false)======================
error:java version "1.8.0_45"
error:Java(TM) SE Runtime Environment (build 1.8.0_45-b15)
error:Java HotSpot(TM) Client VM (build 25.45-b02, mixed mode, sharing)
===============ProcessBuilder redirectErrorStream(true)======================
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b15)
Java HotSpot(TM) Client VM (build 25.45-b02, mixed mode, sharing)
c:\test>
- Java.lang.Process需要注意的问题
- 使用java.lang.Process类时需要注意的事情
- 使用java.lang.Integer需要注意的一个问题
- java.lang.Process 阻塞问题
- java.lang.Process 阻塞问题
- java.lang.Process 阻塞问题
- oracle设置process需要注意的事情
- Process需要注意
- java classpath配置需要注意的问题
- 需要注意的问题
- 需要注意的问题
- Java Process的问题
- JAVA别名问题----JAVA程序需要注意的对象引用
- 关于java的io一个需要注意的问题
- Java 写代码的时候需要注意的问题
- java开发sns游戏服务需要注意的问题
- JAVA中需要注意的问题----收集版本
- Java利用poi读写Excel需要注意的问题
- ACE中线程的创建和管理
- C++的4种类型转换关键字及其特点
- 在xbox配置hadoop伪分布中主要遇到的问题以及解决的办法
- 素数
- 互斥锁机制
- Java.lang.Process需要注意的问题
- 第14周项目1-小玩文件(4)键盘输入文件名统计数据
- 第十四周 【项目2-用文件保存的学生名单】若干名学生的学号 姓名和C++课、高数和英语成绩
- ava集合类详解
- 第14周项目2-用文件保存的学生名单
- Java中如何处理空指针异常
- #9 Palindrome Number
- codeforces #307 D. GukiZ and Binary Operations(各种快速幂+斐波那契)
- 树状数组(二维)例题 HDU2642——Stars