Java本地调用shell,cmd命令

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yan3013216087/article/details/86023758

Java本地调用shell,cmd命令

本地调用cmd命令

@Test
    public void testCmd()throws Exception{
        String cmd="cmd /c date"; //命令的前面必须要有cmd /c
        execCmd(cmd);
    }

    public static void execCmd(String cmd){
        try{
            Runtime rt = Runtime.getRuntime();
            //执行命令, 最后一个参数,可以使用new File("path")指定运行的命令的位置
            Process proc = rt.exec(cmd,null,null);  
            InputStream stderr =  proc.getInputStream();
            InputStreamReader isr = new InputStreamReader(stderr,"GBK");
            BufferedReader br = new BufferedReader(isr);
            String line="";
            while ((line = br.readLine()) != null) { // 打印出命令执行的结果
                System.out.println(line);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

本地调用Linux命令

在java程序中如何调用linux的命令?如何调用shell脚本呢?

这里不得不提到java的process类了。

process这个类是一个抽象类,封装了一个进程(你在调用linux的命令或者shell脚本就是为了执行一个在linux下执行的程序,所以应该使用process类)。
process类提供了执行从进程输入,执行输出到进程,等待进程完成,检查进程的推出状态,以及shut down掉进程。

另外还要注意一个类:Runtime类,Runtime类是一个与JVM运行时环境有关的类,这个类是Singleton的。
这里用到的Runtime.getRuntime()方法是取得当前JVM的运行环境,也是java中唯一可以得到运行环境的方法。(另外,Runtime的大部分方法都是实例方法,也就是说每次运行调用的时候都需要调用到getRuntime方法)
下面说说Runtime的exec()方法,这里要注意的有一点,就是public Process exec(String [] cmdArray, String [] envp);这个方法中cmdArray是一个执行的命令和参数的字符串数组,数组的第一个元素是要执行的命令往后依次都是命令的参数,envp感觉应该和C中的execve中的环境变量是一样的,envp中使用的是name=value的方式。

注意 :此方法会创建一个新进程,而指定的命令就在这个进程中执行。由于需要创建新的进程,开销较大,所以该方法执行时会比较慢。
@Test
    public void testCmd()throws Exception{
        String cmd="/bin/sh -c date"; //命令的前面必须要有/bin/sh -c
        execCmd(cmd);

    }

    public static void execCmd(String cmd){
        try{
            Runtime rt = Runtime.getRuntime();
            //执行命令, 最后一个参数,可以使用new File("path")指定运行的命令的位置
            Process proc = rt.exec(cmd,null,null);  
            InputStream stderr =  proc.getInputStream();
            InputStreamReader isr = new InputStreamReader(stderr,"GBK");
            BufferedReader br = new BufferedReader(isr);
            String line="";
            while ((line = br.readLine()) != null) { // 打印出命令执行的结果
                System.out.println(line);
            }
        }catch (Exception e){
            e.printStackTrace();
        }

    }
	

猜你喜欢

转载自blog.csdn.net/yan3013216087/article/details/86023758