java调用Linux的命令或者脚本

来源:互联网 发布:老司机带带我知乎 编辑:程序博客网 时间:2024/05/03 03:00

java调用Linux的命令或者脚本

Runtime 类介绍:
每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。可以通过 getRuntime 方法获取当前运行时。应用程序不能创建自己的 Runtime 类实例。

根据其API,通过Runtime重载的几个方法可以来执行其shell命令

Process exec(String command)
在单独的进程中执行指定的字符串命令。

Process exec(String[] cmdarray)
在单独的进程中执行指定命令和变量。

Process exec(String[] cmdarray, String[] envp)
在指定环境的独立进程中执行指定命令和变量。

Process exec(String[] cmdarray, String[] envp, File dir)
在指定环境和工作目录的独立进程中执行指定的命令和变量。

Process exec(String command, String[] envp)
在指定环境的单独进程中执行指定的字符串命令。

Process exec(String command, String[] envp, File dir)
在有指定环境和工作目录的独立进程中执行指定的字符串命令。

其中,其实cmdarray和command差不多,同时如果参数中如果没有envp参数或设为null,表示调用命令将在当前程序执行的环境中执行;
如果没有dir参数或设为null,表示调用命令将在当前程序执行的目录中执行,因此调用到其他目录中的文件和脚本最好使用绝对路径。

cmdarray: 包含所调用命令及其参数的数组。 command: 一条指定的系统命令。envp: 字符串数组,其中每个元素的环境变量的设置格式为name=value;如果子进程应该继承当前进程的环境,则该参数为 null。dir: 子进程的工作目录;如果子进程应该继承当前进程的工作目录,则该参数为 null。 

为了执行调用操作,JVM会启一个Process,所以我们可以通过调用Process类的以下方法,得知调用操作是否正确执行

Process类介绍:
ProcessBuilder.start() 和 Runtime.exec 方法创建一个本机进程,并返回 Process 子类的一个实例,该实例可用来控制进程并获得相关信息。
创建的子进程没有自己的终端或控制台。它的所有标准 io(即 stdin、stdout 和 stderr)操作都将通过三个流 (getOutputStream()、getInputStream() 和 getErrorStream()) 重定向到父进程。父进程使用这些流来提供到子进程的输入和获得从子进程的输出。


abstract void destroy()
杀掉子进程。

abstract int exitValue()
返回子进程的出口值。

abstract InputStream getErrorStream()
获取子进程的错误流。

abstract InputStream getInputStream()
获取子进程的输入流。

abstract OutputStream getOutputStream()
获取子进程的输出流。

abstract int waitFor()
导致当前线程等待,如有必要,一直要等到由该 Process 对象表示的进程已经终止。

实例代码


public class Dotest {    public static void main(String[] args) {        Runtime runtime = Runtime.getRuntime();        long maxMemory = runtime.maxMemory();        long totalMemory = runtime.totalMemory();        long freeMemory = runtime.freeMemory();        System.out.println(maxMemory/1024/1024);        System.out.println(totalMemory/1024/1024);        System.out.println(freeMemory/1024/1024);        String cmd = ZhaoShell.Cmd("date");        System.out.println(cmd);    }}class ZhaoShell{    private static Runtime runtime;    static {        runtime=Runtime.getRuntime();    }    public static String Cmd(String cmd){        StringBuffer result = new StringBuffer();        Process exec =null;        try {            exec = runtime.exec(cmd);            //在调用时需要执行waitFor()函数,因为shell进程是JAVA进程的子进程,JAVA作为父进程需要等待子进程执行完毕。            exec.waitFor();            BufferedReader input = new BufferedReader(new InputStreamReader(exec.getInputStream()));            String line = null;            while((line=input.readLine())!=null){                result.append(" "+line);            }        } catch (Exception e) {            e.printStackTrace();        }        return result.toString();    }}
0 0
原创粉丝点击