每次使用java命令可执行一个_JAVA调用系统命令或可执行程序--返回一个Runtime运行时对象,然后启动另外一个进程来执行命令...

通过 java.lang.Runtime 类可以方便的调用操作系统命令,或者一个可执行程序,下面的小例子我在windows和linux分别测试过,都通过。基本原理是,首先通过 Runtime.getRuntime() 返回与当前 Java 应用程序相关的运行时对象,然后调用run.exec(cmd)  另启一个进程来执行命令(cmd为要执行的命令)。

一、运行一个可执行程序

执行一个.exe的文件,或通过已安装的软件打开一个特定格式的文件,如word、chm或mp3等等。

1. 在window下可以直接执行一个.exe文件,如执行我在F盘下的tomcat安装文件,将命令写为:

String cmd = "F:\\apache-tomcat-6.0.20.exe";

2. 打开一个word文档。如果系统已经安装了office应用程序,就可以通过调用word的可执行程序来打开一个word文档:

String cmd = "D:\\Program Files\\Microsoft Office\\OFFICE11\\WINWORD.EXE F:\\test.doc";

当然这样写有点麻烦,我们想打开一个word文档时只要双击就可以了,用不着去找WINWORD.EXE。要是打开每一种格式的文件都得去找它的可执行程序,那可累死了,我们可以通过下面的代码,打开任意一个已知格式的文件(只要安装的打开这种文件格式的软件),相当于用鼠标双击一个文件的图标:

String cmd = "cmd.exe /c start F:\\test.doc";

我用C写了一个进程操作的小例子,放在 linux 下编译出的可执行文件叫“fork_wait”,然后把我的java文件编译成TestRunTime.class后扔到 linux 上,在控制台执行 java TestRunTime 命令,TestRunTime 和 fork_wait 程序均运行成功。

String cmd = "./fork_wait";

二、执行一个有标准输出的系统命令

通过调用进程的 getInputStream() 方法,可以获得执行命令的标准输出。在 windows 的cmd控制台窗口和 linux 控制台执行系统名利的格式是一样的,只是输入的命令不同而已。

如要执行windows控制台中ping命令,可写为:String cmd = "ping www.baidu.com";

执行linux的ls命令,可写为:String cmd = "ls -l";

如果要执行一个带参数的命令,可使用 String 数组形式,如:

String[] cmd=new String[3];

cmd[0]="/bin/sh";

cmd[1]="-c";

cmd[2]="ls -l ./";

下面是我写的小例子:

package com.why.RunTime;

import java.io.BufferedInputStream;

import java.io.BufferedReader;

import java.io.InputStreamReader;

public class TestRunTime {

public static void main(String[] args) {

//windows

//String cmd = "F:\\apache-tomcat-6.0.20.exe";

//String cmd = "D:\\Program Files\\Microsoft Office\\OFFICE11\\WINWORD.EXE F:\\test.doc";

//String cmd = "cmd.exe /c start F:\\test.doc";

String cmd = "ping www.baidu.com";

//linux

//String cmd = "./fork_wait";

//String cmd = "ls -l";

//String[] cmd=new String[3];

//cmd[0]="/bin/sh";

//cmd[1]="-c";

//cmd[2]="ls -l ./";

Runtime run = Runtime.getRuntime();//返回与当前 Java 应用程序相关的运行时对象

try {

Process p = run.exec(cmd);// 启动另一个进程来执行命令

BufferedInputStream in = new BufferedInputStream(p.getInputStream());

BufferedReader inBr = new BufferedReader(new InputStreamReader(in));

String lineStr;

while ((lineStr = inBr.readLine()) != null)

//获得命令执行后在控制台的输出信息

System.out.println(lineStr);// 打印输出信息

//检查命令是否执行失败。

if (p.waitFor() != 0) {

if (p.exitValue() == 1)//p.exitValue()==0表示正常结束,1:非正常结束

System.err.println("命令执行失败!");

}

inBr.close();

in.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

原文:http://www.cnblogs.com/childhooding/p/4580983.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值