zoukankan      html  css  js  c++  java
  • 在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 ./";

     下面是我写的小例子:

    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. }  
  • 相关阅读:
    中间件面试总结
    1.angular js 学习网址
    摄影构图
    mybatis学习(四)
    mybatis学习(三)
    mybatis学习(二)
    mybatis 学习(一)
    mysql 使用过程中出现问题
    springboot
    java 关键字
  • 原文地址:https://www.cnblogs.com/smilesmile/p/3824235.html
Copyright © 2011-2022 走看看