java调用Linux/Windows系统命令

java调用操作系统命令主要使用到Process以及ProcessBuilder这两个类。


ProcessJDK1.5之前调用系统命令广泛使用的一个抽象类,一般都是通过Runtime.exec()和ProcessBuilder.start()来间接创建其实例,但是其功能相对较少。

ProcessBuilderJDK1.5之后出现的一个final类,有两个带参数的构造方法,可以通过构造方法来直接创建其对象,为进程提供了更多功能(可获取/设置系统的环境变量、设置命令执行路径),但是其不是同步的。


一、使用Process调用系统命令

1、调用linux简单的shell语句,调用例子如下:

    public static void shell1() {
              String execution = "whoami";             //要执行的shell语句
              Process process = null;
              BufferedReader input = null;
              String user = "";
              try
              {
                         process = Runtime.getRuntime().exec(execution);
                         process.waitFor();
                         int result = process.exitValue();                 //为0表示执行成功,非0表示shell执行出错
                         input = new BufferedReader(new InputStreamReader(process.getInputStream()));
                         user = input.readLine();                     //user为当前登录的用户名
                         System.out.println(user);  
              }catch (Exception e) {
                         //异常操作
              }finally
             {
                         //销毁process(process.destroy())以及关闭流
             }
    }

2、调用linux含有管道的复杂shell,调用例子如下:

    public static void shell2(){  
                String[] execution = {"/bin/sh","-c","ps -ef | grep mysqld"};   //"ps -ef | grep mysqld" 为要执行的命令
                Process process = null;
                BufferedReader input = null;
                String user = "";
                try
                {
                           process = Runtime.getRuntime().exec(execution);  
                           process.waitFor();  
                           input = new BufferedReader(new InputStreamReader(process.getInputStream()));  
                           String line = null;  
                           while((line = input.readLine())!=null){  
                                       System.out.println(line);  
                           }  
                 }catch (Exception e) {
                          //异常操作
                }finally
                {
                          //销毁process(process.destroy())以及关闭流
                }
     } 


二、使用ProcessBuilder调用系统命令

1、调用linux简单的shell语句,调用例子如下

     public static void shell1(){
             String execution = "whoami";
             Process process = null;
             BufferedReader input = null;
             try
             {
                       ProcessBuilder builder = new ProcessBuilder("sh", "-c", execution);    //即执行 sh  -c  whoami

                       //也可直接为 ProcessBuilder builder = new ProcessBuilder(execution); 

                       Map map = builder.environment();           //获得进程的环境  
                       system.out.println(map.get("JAVA_HOME"));               //打印配置的JAVA_HOME的环境变量
                       map.put("JAVA_HOME","/home/admin/jdk");          //设置环境变量JAVA_HOME为/home/admin/jdk
                       builder.redirectErrorStream(true);
                       process = builder.start();
                       input = new BufferedReader(new InputStreamReader(process.getInputStream()));
                       String userNum = input.readLine();
             }
             catch (Exception e)
             {
                        //异常操作
             }
             finally
             {
                       //销毁process(process.destroy())以及关闭流
             }
     }

2、调用linux含有管道的复杂shell,调用例子如下:


      public static void shell2() {
                  String execution = "ps -ef | grep java | grep -v grep | wc -l";   //要执行的shell
                  Process process = null;
                  BufferedReader input = null;
                  try
                  {
                               ProcessBuilder builder = new ProcessBuilder("sh", "-c", execution);

                               builder.directory(new File("/home/admin"));    //设置在/home/admin目录下执行命令  
                               builder.redirectErrorStream(true);
                               process = builder.start();
                               input = new BufferedReader(new InputStreamReader(process.getInputStream()));
                               String userNum = input.readLine();
                               System.out.println(userNum);      //可以打印出java进程数
                    }
                    catch (Exception e)
                    {
                               //异常操作
                     }
                     finally
                     {
                                //销毁process(process.destroy())以及关闭流
                      }
       }

3、Windows调用 F 盘 WIN 目录下的 test.jar ,调用例子如下:

       public static void shell3(){
                    Process process = null;
                    try
                     {
                                 ProcessBuilder builder = new ProcessBuilder("java", "-jar", "test.jar");        //在命令行执行 “java -jar test.jar”
                                 builder.directory(new File("F:/WIN"));             //设置工作目录,即执行F盘WIN目录下的test.jar
                                 builder.redirectErrorStream(true);
                                 process = builder.start();
                     }
                     catch (Exception e)
                     {
                                //异常操作
                     }
                     finally
                     {
                                //销毁process(process.destroy())以及关闭流
                     }
      }
 

你可能感兴趣的:(java调用Linux/Windows系统命令)