Runtime.getRuntime().exec学习和应用,java代码执行命令 |
您所在的位置:网站首页 › 在cmd中运行指令出现runtime的错误 › Runtime.getRuntime().exec学习和应用,java代码执行命令 |
Runtime.getRuntime().exec()方法主要用于执行外部的程序或命令。 方法: Processexec(String command) 在单独的进程中执行指定的字符串命令。Processexec(String cmdarray[]) 在单独的进程中执行指定命令和变量。Processexec(String[] cmdarray, String[] envp) 在指定环境的独立进程中执行指定命令和变量。Processexec(String[] cmdarray, String[] envp, File dir) 在指定环境和工作目录的独立进程中执行指定的命令和变量。Processexec(String command, String[] envp) 在指定环境的单独进程中执行指定的字符串命令。Processexec(String command, String[] envp, File dir) 在有指定环境和工作目录的独立进程中执行指定的字符串命令。
相关说明: dir 指定了新子进程的工作目录。如果 dir 为 null,那么子进程会继承当前进程的当前工作目录 先来比较exec(String command)与exec(String[] cmdArray)的区别,其实他们是等价的,最终都会 调用:exec(String command, String[] envp, File dir); public Process exec(String command) throws IOException { return exec(command, null, null); } public Process exec(String cmdarray[]) throws IOException { return exec(cmdarray, null, null); }看看方法exec(String command, String[] envp, File dir)的实现代码: public Process exec(String[] cmdarray, String[] envp, File dir) throws IOException { return new ProcessBuilder(cmdarray) .environment(envp) .directory(dir) .start(); }从上面的代码,我们可以看出最终调用的代码都是:exec(String[] cmdArray,String envp,File dir)。exec(String command)相当于exec(command,null,null),exec(String[] cmdArray)相当于exec(cmdArray,null,null)。 参数说明: cmdarray - 包含所调用命令及其参数的数组。 envp - 字符串数组,其中每个元素的环境变量的设置格式为 name=value,如果子进程应该继承当前进程的环境,或该参数为 null。 dir - 子进程的工作目录;如果子进程应该继承当前进程的工作目录,则该参数为 null。 另外,执行exec(String command)不等同于直接执行command line命令,比如命令: javap -l xxx > output.txt 这时要用exec(String[] cmdArray)。如例: Process p = Runtime.getRuntime().exec(new String[]{"/bin/sh","-c", "javap -l xxx > output.txt"});关于返回结果类型:Process,它有几个方法: 1.destroy():杀掉子进程 2.exitValue():返回子进程的出口值,值 0 表示正常终止 3.getErrorStream():获取子进程的错误流 4.getInputStream():获取子进程的输入流 5.getOutputStream():获取子进程的输出流 6.waitFor():导致当前线程等待,如有必要,一直要等到由该 Process 对象表示的进程已经终止。如果已终止该子进程,此方法立即返回。如果没有终止该子进程,调用的线程将被阻塞,直到退出子进程,根据惯例,0 表示正常终止 说明:目前项目中使用Runtime.getRuntime().exec进行脚本的一个跑批,然后调用waitFor()方法 实际应用: 近期通过文件总线进行获取文件压缩包,底层是通过https同步请求获取,当拿到这个压缩包后,需要进行解压,解压属于定时任务中的一部分,那如何有效的通过java代码操作linux命令进行解压就成为了一个问题。 那么自己得通过电脑模拟线上进行解压; 1 环境搭建 在linux上通过docker 安装java环境,这个自己搭建,不多说,路径自己选择存放 2 准备一个jar包 Process p = Runtime.getRuntime().exec("tar -zxvf /home/20220910.tar.gz -C /home/"); 这样执行也是可以的,从上面的方法上看,底层调用的是相同的源码。 这是一个简单的springboot工程,然后install一下打成jar包 3 在linux上运行 linux上如何执行一个jar包是一个关键问题,这时候可以通过java -h 查看帮助 tar.gz压缩包存放的位置:
执行命令: java -cp tarUnzip-1.0-SNAPSHOT.jar com.orange.tar.Runshell1 com.orange.tar.Runshell1--是指main主方法的类路径 对比一下,此时压缩文件已解压,并且是在linux上执行的java操作 ———————————————— 版权声明:本文为CSDN博主「soranges」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_44696583/article/details/126862058 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |