`
wuhongyu
  • 浏览: 404423 次
  • 性别: Icon_minigender_1
  • 来自: 哈尔滨
社区版块
存档分类
最新评论

JAVA调用系统命令或可执行程序

阅读更多

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

 

分享到:
评论
6 楼 ItBirdFly 2012-06-15  
求教
我使用你这种方式运行多个程序 好慢啊!
就是运行了第一个程序后再运行第二个之间的时间好长!
这是怎么回事呢?
5 楼 zhang964761032 2011-05-10  
学习学习,谢谢分享
4 楼 zhang964761032 2011-05-10  
学学,呵呵
3 楼 wuhongyu 2010-11-09  
helloman0907 写道
如果是执行一段脚本,bat或则是shell,你如何判断成功与否?p.waitfor的返回值只是脚本中最后一个命令执行返回的结果,万一你中间有那条命令执行错误最后一条却成功,那岂不是判断执行成功?

感谢关注先!再说这个p.waitfor返回的并不是脚本中哪个命令的执行结果,而是这个脚本是否正常执行完毕,就算一个脚本中的所有命令都执行失败,只要这个脚本能执行完,就返回成功。
2 楼 helloman0907 2010-09-21  
如果是执行一段脚本,bat或则是shell,你如何判断成功与否?p.waitfor的返回值只是脚本中最后一个命令执行返回的结果,万一你中间有那条命令执行错误最后一条却成功,那岂不是判断执行成功?
1 楼 xiaoqing20 2010-01-14  
谢谢分享啊!

相关推荐

    Java调用外部程序命令

    F:\Work\Study\功能点技术\java调用可执行文件\Java调用外部程序命令.doc

    java调用windows命令

    JAVA如何调用WINDOWS命令行 用Java编写应用时,有时需要在程序中调用另一个现成的可执行程序或系统命令

    java 程序都编译成执行文件jar命令详解

    如何把 java 程序编译成 .exe 文件。通常回答只有两种,一种是制作一个可执行的 JAR 文件包,然后就可以像.chm 文档一样...所以,使用制作可执行 JAR 文件包的方法就是最佳选择了,何况它还能保持 Java 的跨平台特性

    通过jar命令生成可执行的jar文件

    通过jar生成可执行的jar文件 将您要打包成jar的class文件放到D盘的temp目录下(也可以自定义) 在cmd命令行中键入如下指令: 1. 进入temp目录:cd tmep 2. 输入打包jar命令:jar -cvfe test.jar JFrameDemo3 . (点...

    换器也兼容其他多版本的JAVA程序,比如S40手机的JAVA程序

    【执行程序 Midp2Exe.exe】是一个DOS可执行文件,需要在DOS环境下执行,对没有DOS使用经验的人来说,操作起来会比较吃力。 【数据库文件 MidpRuntimeDLL.dll】是重要的主程序文件,执行程序就是调用这个文件来模拟...

    AdbShellCommand:在Android项目中执行adb Shell命令,通过java代码调用执行,采用MVP架构演示样例

    ##AdbShellCommand在Android项目中执行adb Shell命令,通过java代码调用执行,本程序采用MVP架构。###Java中执行adb shell命令本项目中,adb shell命令执行的实现方法主要参考网文()。文章中,把执行代码集成在...

    制作可执行的JAR文件包及jar命令详解

    常常在网上看到有人询问:如何把 java 程序编译成 .exe 文件。通常回答只有两种,一种是制作一个可执行的 JAR 文件包,...所以,使用制作可执行 JAR 文件包的方法就是最佳选择了,何况它还能保持 Java 的跨平台特性。

    实验指导1Java开发环境和Java程序结构.doc

    好的东西实验目的: ⑴掌握Java语言的基本原理。 ⑵掌握JDK开发工具的安装和配置。 ⑶通过简单的程序设计,了解Java程序的运行原理及基本结构。... ⑷了解常用的可执行程序的命令。 ⑸掌握eclipse的使用。

    ansible-javax:Ansible模块,用于执行任意java类或jar

    使用命令或外壳模块在Ansible中运行基本Java应用程序非常容易且相对简单。 当您的应用程序需要各种选项(例如最大堆大小或线程堆栈)并且具有大量的类路径和系统属性都在命令行上定义时,事情很快就会变得复杂和...

    java语言与面向对象程序设计形考1-0001.docx

    试卷总分:100 单选题(共15题,共45分) 开始说明: 结束说明: 1.(3分) 安装好JDK后,在其bin目录下有许多exe可执行文件,其中"javac.exe"命令的作用是以下哪一种? A、Java文档制作工具 B、Java解释器 C、Java编译器...

    JAVA上百实例源码以及开源项目

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    JAVA上百实例源码以及开源项目源代码

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    java windows 计时工具

    1.执行文件,选择要让时启动的可执行程序。 如果是在系统的默认目录则可直接输入可执行名称。 如:cmd或cmd.exe 2.运行参数,应用程序运行所需的参数,如果没有则为空。 如/c ping 127.0.0.1 添加任务→...

    基于stm32、树莓派,后端使用Java的SpringBoot架构,以微信小程序作为用户控制端的智能家居控制系统,含完整源代码

    基于stm32、树莓派,后端使用Java的springboot架构,以微信小程序作为用户控制端的智能家居控制系统,含完整源代码 socketBOX:(运行在智能音箱上的socket程序) |-- client.h(客户端程序头文件) |-- client.c...

    java开源包8

    LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...

    使用C++语言实现基于JVMTI机制的 JAVA 代码 加密保护工具

    如果执行过程报错,可以在程序根目录下执行以下语句:export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH 或将libClassHook.so 拷贝到/usr/lib目录中去。 支持操作系统:加密请在windows64位系统并安装了64位jdk环境...

    java开源包1

    LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...

    java环境搭建.docx

    bin目录(binary 二元的)二进制文件或可执行文件: java.exe:运行 javac.exe:编译   db目录(关于数据的存储)   include目录(本地接口编程): 包含C语言给java语言提供的一些接口支持   jre...

    JAVA-DOS-command.rar_DOS java_dos command_java dos_shelf

    JAVA如何调用DOS命令,用Java编写应用时,有时需要在程序中调用另一个现成的可执行程序或系统命令,这时可以通过组合使用Java提供的Runtime类和Process类的方法实现。

Global site tag (gtag.js) - Google Analytics