Java怎么调用壳命令和脚本

  介绍

这篇文章主要为大家展示了Java怎么调用壳命令和脚本,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“Java怎么调用壳命令和脚本”这篇文章吧。

Java可以用来干什么

Java主要应用于:1。网页开发;2。Android开发;3。客户端开发;4。网页开发;5。企业级应用开发;6。Java大数据开发;7。游戏开发等。

1。介绍

有时候我们在Linux中运行Java程序时,需要调用一些壳命令和脚本。而Runtime.getRuntime () .exec()方法给我们提供了这个功能,而且Runtime.getRuntime()给我们提供了以下几种exec()方法:

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

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

<李>

cmdarray:包含所调用命令及其参数的数组。

<李>

命令:一条指定的系统命令。

<李>

envp:字符串数组,其中每个元素的环境变量的设置格式为name=价值;如果子进程应该继承当前进程的环境,则该参数为零。

<李>

dir:子进程的工作目录,如果子进程应该继承当前进程的工作目录,则该参数为零。

细心的读者会发现,为了执行调用操作,JVM会启一个过程,所以我们可以通过调用过程类的以下方法,得知调用操作是否正确执行:

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

进程的出口值。根据惯例,0表示正常终止,否则,就表示异常失败。
另外,调用某些壳命令或脚本时,会有返回值,那么我们如果捕获这些返回值或输出呢?为了解决这个问题,过程类提供了:

abstract  InputStream  getInputStream (),   获取子进程的输入流只最好对输入流进行缓冲。

2。调用壳命令

这里为了说明问题,我仅用焦油命令进行演示. tar命令是一个打包而不进行压缩的命令。同时,为了检查沥青的调用是否被正常执行,我将调等待,用()方法。

private  void  callCMD (String  tarName, String 文件名,,字符串…,工作区){   ,try  {   ,String  cmd =,“tar  -cf", +, tarName  +,,,,, +,文件名;//,,,,,,String [], cmd =, {“tar",,“-cf",, tarName,,文件名};   ,File  dir =,空;   ,如果(工作区[0],!=,null) {   时间=dir 才能;new 文件(工作区[0]);   System.out.println才能(工作区[0]);   ,}=,,process  Runtime.getRuntime () .exec (cmd, null,, dir);//,,,,,process =, Runtime.getRuntime () .exec (cmd);   ,int  status =, process.waitFor ();   ,如果(status  !=, 0) {   System.err.println才能(“Failed 用call 壳牌# 39;s  command 以及,return 状态# 39;s ,:,“, +,状态);   ,}   ,}   ,catch  (Exception  e) {   ,e.printStackTrace ();   ,}   }

注意:如果把命令放到一个String[]中时,必须把命令中每个部分作为一个元素存在String[]中,或者是把命令按照空格符分割得到的String []。

String [], cmd =, {“tar",,“-cf",, tarName,,文件名},//右   时间=String [], cmd  {“tar  -cf",, tarName,,文件名},,,//误差

为了说明dir参数的作用,我特地把该Java程序和要打包的目录蜂巢/放在不同的目录:

/根/workspace/eclipse/测试/src/edu/wzm/CallShell.java/root/experiment/hive

Java怎么调用壳命令和脚本