Java调用系统命令或可执行程序的方法介绍

开发 后端
本文介绍了如何使得JAVA调用系统命令或可执行程序,并且举了一个小例子进行说明。

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

一、JAVA调用可执行程序

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

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

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

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

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

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

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

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

  1. String cmd = "./fork_wait"

二、JAVA调用系统命令

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

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

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

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

  1. String[] cmd=new String[3];  
  2. cmd[0]="/bin/sh";  
  3. cmd[1]="-c";  
  4. cmd[2]="ls -l ./"

下面是我写的小例子:

Java代码

  1. package com.why.RunTime;     
  2. import java.io.BufferedInputStream;     
  3. import java.io.BufferedReader;     
  4. import java.io.InputStreamReader;     
  5.     
  6. public class TestRunTime {     
  7.     public static void main(String[] args) {     
  8.         //windows     
  9. //      String cmd = "F:\\apache-tomcat-6.0.20.exe";     
  10. //      String cmd = "D:\\Program Files\\Microsoft Office\\OFFICE11\\WINWORD.EXE F:\\test.doc";     
  11. //      String cmd = "cmd.exe /c start F:\\test.doc";     
  12.         String cmd = "ping www.baidu.com";     
  13.              
  14.         //linux     
  15. //      String cmd = "./fork_wait";     
  16. //      String cmd = "ls -l";     
  17. //      String[] cmd=new String[3];     
  18. //      cmd[0]="/bin/sh";     
  19. //      cmd[1]="-c";     
  20. //      cmd[2]="ls -l ./";     
  21.         Runtime run = Runtime.getRuntime();//返回与当前 Java 应用程序相关的运行时对象     
  22.         try {     
  23.             Process p = run.exec(cmd);// 启动另一个进程来执行命令     
  24.             BufferedInputStream in = new BufferedInputStream(p.getInputStream());     
  25.             BufferedReader inBr = new BufferedReader(new InputStreamReader(in));     
  26.             String lineStr;     
  27.             while ((lineStr = inBr.readLine()) != null)     
  28.                 //获得命令执行后在控制台的输出信息     
  29.                 System.out.println(lineStr);// 打印输出信息     
  30.             //检查命令是否执行失败。     
  31.             if (p.waitFor() != 0) {     
  32.                 if (p.exitValue() == 1)//p.exitValue()==0表示正常结束,1:非正常结束     
  33.                     System.err.println("命令执行失败!");     
  34.             }     
  35.             inBr.close();     
  36.             in.close();     
  37.         } catch (Exception e) {     
  38.             e.printStackTrace();     
  39.         }     
  40.     }     
  41. }   

JAVA调用系统命令或可执行程序的方法就给大家介绍到这里。

【编辑推荐】

  1. 多核时代考验Java代码编写习惯
  2. JSR通过JavaEE 6依赖注入标准 各方观点不一
  3. Sun发布JDK 7早期预览版 JVM性能大幅提升
  4. 来自一年前的预测:Java平台与死亡相去甚远
  5. Java新型垃圾回收器G1深入探索
责任编辑:book05 来源: javaeye
相关推荐

2024-03-08 09:34:35

JpackageJarJava

2010-03-23 10:29:28

Python程序编译转

2010-03-26 14:49:04

Python脚本

2022-06-17 07:57:53

拦截包装软链接

2021-08-12 09:17:18

WFH漏洞劫持攻击

2009-04-16 10:37:17

Javaexejar

2022-01-11 09:59:23

Python关机程序文件

2022-02-04 22:05:19

JVM程序内存模型

2009-12-25 16:21:41

shell命令

2012-05-29 15:17:08

JavaWMIC

2015-02-02 11:03:12

2010-05-07 15:49:16

ibmdw嵌入式

2009-07-08 15:18:00

JAR文件包jar命令

2011-09-19 19:21:54

linux

2016-03-28 10:00:09

Swift命令程序

2023-03-31 08:44:55

Go开发命令

2019-04-16 06:50:34

2020-02-06 10:10:24

python程序代码

2012-01-05 10:37:40

Java

2010-07-15 10:58:23

Perl命令行程序
点赞
收藏

51CTO技术栈公众号