服务器执行命令或脚本的两种方式

news2024/9/30 11:32:29

目录

1、通过Runtime

2、通过ProcessBuilder 


在java开发中,有时候需要与操作系统的命令行交互,执行特定的CMD命令或脚本。

我们有如下两种方式来实现:

Java的Runtime类和ProcessBuilder类都允许Java程序启动一个新的进程并执行特定的命令,通过标准输入输出流进行数据交换。Runtime类适用于简单的命令执行,ProcessBuilder类则更加灵活,适用于复杂的命令和参数传递。

1、通过Runtime

Runtime类提供了exec()方法来执行CMD命令。该方法接收一个String类型的命令字符串,并返回一个Process对象,通过这个对象可以获取命令执行的结果。

public static void runtimeExec() {
        try {
            // 调用CMD命令
            String command = "jps -l";
            Process process = Runtime.getRuntime().exec(command);

            // 获取命令输出结果
            InputStream inputStream = process.getInputStream();
            // InputStream errorStream = process.getErrorStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "GBK")); // 设置编码为GBK
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }

            // 等待命令执行完成
            process.waitFor();
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }

输出结果如下

简单看下Runtime源码:

 public Process exec(String command) throws IOException {
        return exec(command, null, null);
    }

public Process exec(String command, String[] envp, File dir)
        throws IOException {
        if (command.isEmpty())
            throw new IllegalArgumentException("Empty command");

        StringTokenizer st = new StringTokenizer(command);
        String[] cmdarray = new String[st.countTokens()];
        for (int i = 0; st.hasMoreTokens(); i++)
            cmdarray[i] = st.nextToken();
        return exec(cmdarray, envp, dir);
    }

// 可以看到也是通过ProcessBuilder对象去start的
public Process exec(String[] cmdarray, String[] envp, File dir)
        throws IOException {
        return new ProcessBuilder(cmdarray)
            .environment(envp)
            .directory(dir)
            .start();
    }

 

2、通过ProcessBuilder 

public static void processBuilder() throws IOException, InterruptedException {
        ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", "jps -l");

        //设置环境变量,初始值是当前进程环境的一个副本System.getenv()
      /*  Map<String, String> env = pb.environment();
        env.put("key", "value");*/

        //设置工作目录
        pb.directory(new File("E:\\study\\shell"));

        //redirectErrorStream 属性默认值为false,意思是子进程的标准输出和错误输出被发送给两个独立的流,这些流可以通过 Process.getInputStream() 和 Process.getErrorStream() 方法来访问。
        //如果将值设置为 true,标准错误将与标准输出合并。这使得关联错误消息和相应的输出变得更容易。
        // 在此情况下,合并的数据可从 Process.getInputStream() 返回的流读取,而从 Process.getErrorStream() 返回的流读取将直接到达文件尾。
        pb.redirectErrorStream(true);
       /* File log = new File("E:\\study\\shell\\log.txt");
        pb.redirectOutput(ProcessBuilder.Redirect.to(log));*/

        //启动进程
        Process process = pb.start();
        // 获取命令输出结果
        InputStream inputStream = process.getInputStream();
        //InputStream errorStream = process.getErrorStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "GBK")); // 设置编码为GBK
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }

        // 等待命令执行完成
        process.waitFor();
    }

输出结果:

当我们需要调用服务的某些脚本时,我们一般使用ProcessBuilder来调用,更加灵活 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1139975.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2016年亚太杯APMCM数学建模大赛B题化学元素对变形钢筋性能的影响求解全过程文档及程序

2016年亚太杯APMCM数学建模大赛 B题 化学元素对变形钢筋性能的影响 原题再现 热轧带肋钢筋通常被称为变形钢筋&#xff0c;它主要用于钢筋混凝土构件的骨架&#xff0c;在使用中需要一定的机械强度、弯曲和变形性能、制造焊接性。钢中的化学成分是影响热轧钢最终组织性能的基…

港联证券:上市公司三季报反映经济回暖向好态势

我国经济在三季度继续回暖向好的态势&#xff0c;在越来越多上市公司发表的三季报里得到印证。 到10月26日&#xff0c;在已发布2023年三季报的1498家企业中&#xff0c;约有255家第三季度归母净获利跨越上半年总和&#xff0c;占已发表企业的17%。此外&#xff0c;682家公司三…

『Linux』补丁制作指南

前言 我们在参与某些开源项目的过程当中&#xff0c;经常会遇到漏洞之类的问题&#xff0c;需要我们打补丁解决。尤其是 Linux 源码&#xff0c;源码代码量较多&#xff0c;在修改完内核并发布新内核的时候&#xff0c;基本采用补丁的方式进行发布&#xff0c;而不是将整个内核…

如何在vscode中添加less插件

Less &#xff08;Leaner Style Sheets 的缩写&#xff09; 是一门向后兼容的 CSS 扩展语言。它对CSS 语言增加了少许方便的扩展&#xff0c;通过less可以编写更少的代码实现更强大的样式。但less不是css&#xff0c;浏览器不能直接识别&#xff0c;即浏览器无法执行less代码&a…

基于java+swing+mysql实现的仓库商品管理系统

JavaSwingmysql用户信息管理系统 一、系统介绍二、功能展示三、项目相关3.1 乱码问题3.2 如何将GBK编码系统修改为UTF-8编码的系统&#xff1f; 四、其它1.其他系统实现 五、源码下载 一、系统介绍 本系统实现了两个角色层面的功能&#xff0c;管理员可以管理用户、仓库、商品…

ED8000 地下电子标签探测器|标识器探测仪深度测量校准操作说明

ED8000 地下电子标签探测器|电子标识器探测仪是探测地下电子标签或电子标识器的专用手持仪器&#xff0c;采用基于 ARM 架构的32位高性能处理器&#xff0c;反应敏捷&#xff1b;距离测量时采用异步差分测量技术&#xff08;已申请专利&#xff09;&#xff0c;即使在有干扰的情…

论文阅读——DistilBERT

ArXiv&#xff1a;https://arxiv.org/abs/1910.01108 Train Loss: DistilBERT&#xff1a; DistilBERT具有与BERT相同的一般结构&#xff0c;层数减少2倍&#xff0c;移除token类型嵌入和pooler。从老师那里取一层来初始化学生。 The token-type embeddings and the pooler a…

windows11系统如何关闭自带杀毒软件

在有时候 我们下载一些东西 通过不过杀毒软件 需要关闭 不过我还是奉劝大家 过不了的 可能就代表着携带病毒 还是慎重为好 弄清楚来源免得给自己带来麻烦 毕竟电脑也是贵重物品 首先 右键下方菜单 选择设置 在左侧菜单中 选择 隐私和安全性 在新弹出的面板中选择 Windows 安…

SpringCloud微服务多应用脚手架的搭建与部署

最近几年SpringBoot大热&#xff0c;很多IT公司都开始采用SpringBoot来替换传统的SpringMVC项目。那么如何搭建一个适合开发的项目架构呢&#xff1f; 这里我主要介绍Java程序员使用最多的两种工具进行搭建&#xff1a;1、MyEclipse&#xff1b;2、idea MyEclipse搭建 第一步…

港联证券:2万元股票一进一出手续费?

股市生意中的手续费是出资者无法避免的一项费用。关于许多出资者来说&#xff0c;手续费的多少对出资收益有着重要的影响。本文将从多个视点分析2万元股票一进一出手续费&#xff0c;并讨论其对出资者和商场的影响。 首先&#xff0c;从出资者的视点来看&#xff0c;2万元股票…

数据分析必备原理思路(三)

文章目录 四、图文并茂的数据汇报与观点表达1. 什么是数据表达?2. 数据表达的目的是什么?3. 为什么要基于数据进行表达?4. 如何基于图表进行优质的数据表达&#xff1f;&#xff08;1&#xff09;提炼文字观点&#xff08;2&#xff09;制作完善图表a. 视觉映射原理与可视化…

偏微分方程为什么要先先验估计再求解的存在性,先验估计有什么用?

见知乎 https://www.zhihu.com/question/43549959?utm_sourceqq&utm_mediumsocial&utm_oi1315073218793488384

国产数据库达梦Dm8部署

点击上方蓝字关注我 1. 部署前工作 1.1 介质下载 下载地址&#xff1a;https://www.dameng.com/list_103.html 结合服务器类型选择对应版本&#xff1a; 1.2 环境检查 硬件环境要求 用户应根据 DM 及应用系统的需求来选择合适的硬件配置&#xff0c;如 CPU 的指标、内存及磁盘…

米软科技客户单病种上报量云南省第一

近日米软获悉&#xff0c;在云南省统计的单病种上报情况中&#xff0c;截止2021年11月15日&#xff0c;上线单病种系统不足半年的红河州第一人民医院&#xff08;云南省滇南中心医院&#xff09;以占全省上报总数5%的22950例&#xff0c;遥遥领先于同省各家二三级医院。 全省上…

SAP 让ALV表格修改后保存到数据库(1.设置图标事件;2.LVC_S_GLAY-EDT_CLL_CB字段直接实现)

SAP ALV报表输出后&#xff0c;用户更改ALV上可编辑的数据&#xff0c;然后保存回SAP内表去&#xff0c;这种需求有两种实现方式 1.给ALV输出界面设置额外工具条按钮来实现 2.ALV 函数 REUSE_ALV_GRID_DISPLAY_LVC 的参数 I_GRID_SETTINGS &#xff0c;设置 LVC_S_GLAY-EDT_CLL…

LibreOffice中如何插入公式

点击 插入-》对象-》公式对象&#xff0c;调出公式编辑界面&#xff1a; 可以在左侧的下拉列表中选择要插入的公式的种类&#xff1a; 例如&#xff0c;在下拉列表中选择“函数”&#xff0c; 选择要插入的函数&#xff0c;例如指数函数&#xff1a; 在右侧编辑窗口就可…

【Java每日一题】——第四十一题:编写程序描述影视歌三栖艺人。(2023.10.27)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

部署应用链太费心?Tanssi 教你轻松开发部署

如果你在构建一个跨链的去中心化交易所&#xff0c;需要聚合不同链的数据&#xff0c;或者想打造一个链上实时战略游戏&#xff0c;现有公链由于缺乏可定制性&#xff0c;都无法满足这样的需求&#xff0c;因为难以处理开发这些应用所需的处理量、数据聚合或隐私要求。因此&…

百度智能云获评Forrester中国市场人工智能/机器学习平台领导者

写在前面百度智能云AI平台&#xff0c;打造企业智能化转型的基础设施大模型时代&#xff0c;百度智能云AI平台迎来全面升级 写在前面 日前&#xff0c;国际权威咨询机构 Forrester 发布了最新的《The Forrester Wave™&#xff1a;中国市场人工智能/机器学习平台厂商评测&…

word2vec两种优化方式的联系和区别

总结不易&#xff0c;请大力点赞&#xff0c;感谢 上一个文章&#xff0c;Word2vec-负采样/霍夫曼之后模型是否等价-绝对干货是字节的面试真题&#xff0c;建议朋友们多看几遍&#xff0c;有问题及时沟通。 私下有几个朋友看完之后还是有点懵&#xff0c;又问了一下具体细节。…