通过 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();
}
}
}

  

JAVA调用系统命令或可执行程序--返回一个Runtime运行时对象,然后启动另外一个进程来执行命令的更多相关文章

  1. Java虚拟机(一)结构原理与运行时数据区域

    我们来学习Java虚拟机的结构原理与运行时数据区域. 1.Java虚拟机概述 Oracle官方定义的Java技术体系主要包括以下几个部分: Java程序设计语言 各种平台的Java虚拟机 Class文 ...

  2. 编译器设计-RunTime运行时环境

    编译器设计-RunTime运行时环境 Compiler Design - Run-Time Environment 作为源代码的程序仅仅是文本(代码.语句等)的集合,要使其活动,它需要在目标计算机上执 ...

  3. iOS开发——高级特性&Runtime运行时特性详解

    Runtime运行时特性详解 本文详细整理了 Cocoa 的 Runtime 系统的知识,它使得 Objective-C 如虎添翼,具备了灵活的动态特性,使这门古老的语言焕发生机.主要内容如下: 引言 ...

  4. Runtime运行时的那点事儿

    注:本文是对 Colin Wheeler 的 Understanding the Objective-C Runtime 的翻译. 初学 Objective-C(以下简称ObjC) 的人很容易忽略一个 ...

  5. Objective-C Runtime 运行时之一:类与对象(转载)

    Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一 ...

  6. ios - runtime运行时应用---交换方法

    runtime运行时用法之一 --- 交换类的方法,此处简单写了把系统的UIView的setBackgroundColor的方法换成了自定义的pb_setBackgroundColor 首先创建UIV ...

  7. runtime 运行时机制 完全解读

    runtime 运行时机制 完全解读   目录[-] import import 我们前面已经讲过一篇runtime 原理,现在这篇文章主要介绍的是runtime是什么以及怎么用!希望对读者有所帮助! ...

  8. 【基本功】Java动态追踪技术探究 不重启JVM,替换掉已经加载的类?不重启JVM,获知运行时对象的属性

    https://mp.weixin.qq.com/s/_hSaI5yMvPTWxvFgl-UItA 小结: 1.根据Java的类加载机制,在同一个ClassLoader中,类是不允许重复的: 2.单例 ...

  9. JAVA调用系统命令:python、shell等

    实际项目开发场景中,可能会用到java项目调用系统命令的需求,如调用python或者shell脚本 可以参考如下例子,例子来源于ambari源码: \ambari\ambari-server\src\ ...

随机推荐

  1. centos7 最小化安装 无 ifconfig,netstat 的安装

    centos7 最小化安装 无 ifconfig,netstat 的安装 centos7 最小化安装之后,默认是没有 ifconfig,netstat命令的: 我们可以直接使用 yum -y inst ...

  2. jQuery Ajax学习

    地址:http://www.w3school.com.cn/jquery/jquery_ref_ajax.asp

  3. 【转】 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法

    sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能 ...

  4. CentOS下更新python版本

    执行#Python或#python -V或#python --version,看到版本号是2.7.5,到官网https://www.python.org/ftp/python/查看了下最新版本都到了2 ...

  5. WebService是什么

    Webservice的一个最基本的目的就是提供在各个不同平台的不同应用系统的协同工作能力. 其实WebService并不是什么神秘的东西,它就是一个可以远程调用的类,或者说是组件. 为什么要使用Web ...

  6. ThinkPHP框架如何修改X-Powered-By

    以前用ThinkPHP框架开发了一个小网站,前几天查询页面HTTP状态发现,里面有一项: X-Powered-By: ThinkPHP 2.0 这样虽然没什么,但感觉如果别有用心的人查询会知道你是用这 ...

  7. FileUpload上传与下载

    后台代码: public string connstr = "server=128.1.3.113;database=test;uid=sa;pwd=pass"; protecte ...

  8. Storm(4) - Distributed Remote Procedure Calls

    Using DRPC to complete the required processing 1. Create a new branch of your source using the follo ...

  9. mysql 无法启动1067

    关键字:mysql无法启动办事,mysql卡死,InnoDB"" registration as a STORAGE ENGINE failed.Unknown/unsupport ...

  10. C#基础学习文章导航

    第一部分:入个门 C#入门篇-1:HelloWorld的类 C#入门篇-2:什么是变量 C#入门篇-3:数据类型及转换 C#入门篇-4:使用运算符 第二部分:流程控制语句 C#入门篇5-1:流程控制语 ...