java调用LinuxWindows系统命令

xiaoxiao2021-02-27  161

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<String, String> 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())以及关闭流                      }       }  
转载请注明原文地址: https://www.6miu.com/read-13250.html

最新回复(0)