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

转:http://wuhongyu.iteye.com/blog/461477

 

通过 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 ./";

 

 下面是我写的小例子:

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.     }  

二、
String[] cmd = new String[5];  
cmd[0] = "cmd";  
cmd[1] = "/c";  
cmd[2] = "start";  
cmd[3] = " ";  
cmd[4] = filePath;  
Process process = Runtime.getRuntime().exec(cmd);
 或
Process process = Runtime.getRuntime().exec("cmd /c start \"\" \"E:\\kk sd\\www.txt\"");  
 调用外部程序来打开一个相应的文件
比如我们要使用Editplus来打开一个远程机器上的文件,可以这样
Runtime.getRuntime().exec("D:\\EditPlus \\EditPlus.exe"+" "+\\\\172.16.1.6\\server1\\SystemErr.log)即 
 
Runtime.getRuntime().exec("外部程序位置"+" "+"要打开的文件").
 在JDK6中可以使用如下方式:
Desktop dsk=DeskTop.getDesktop();  
dsk.open(new File(filePath));  
 


你可能感兴趣的:(java)