首页 > 编程语言 >[Java SE] Java执行命令行

[Java SE] Java执行命令行

时间:2023-08-25 15:46:21浏览次数:145  
标签:执行命令 java process new command import Java SE

1 序言

  • 实现自动化程序、跨环境调用的重要途径

2 源码示例

package test.java;

import org.junit.Test;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

/**
 * @author johnny-zen
 * @version v1.0
 * @create-time 2023/8/25 11:38
 * @description ...
 * @refrence-doc
 *  [1] 如何在 Java 中运行命令行 - 火焰兔 - https://www.zadmei.com/rhzjzyxm.html
 * @gpt-promt
 */

public class ExecuteCommandTest {
    @Test
    public void processTest(){
        String command = "jps -l";// jps -l / java -verbose
        try {
            // 创建一个 Runtime 实例
            Runtime runtime = Runtime.getRuntime();
            // 执行命令行命令
            Process process = runtime.exec(command);

            // 获取命令行输出结果
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
            // 等待命令行执行完毕
            int exitCode = process.waitFor();
            System.out.println("finished to execute the command, and the exit code : " + exitCode);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    @Test
    public void processBuilderTest(){
        try {
            // 指定要执行的命令或可执行文件及其参数
            List<String> command = Arrays.asList("ping","www.baidu.com");
            //List<String> command = Arrays.asList("cmd.exe", "/c", "dir");

            // 创建一个 ProcessBuilder 实例
            ProcessBuilder processBuilder = new ProcessBuilder(command); //new ProcessBuilder("dir", "-l");

            // 设置工作目录(可选)
            //String workingDirectory  = "C:\\Users\\408675\\Desktop";
            //processBuilder.directory(new File(workingDirectory));

            // 启动进程
            Process process = processBuilder.start();

            // 获取命令行输出结果 (可选)
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream(), "GBK"));// Windows CMD 默认以 GBK 字符集 编码文本
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }

            // 获取环境信息 (可选)
            // eg: <key: JAVA_HOME, value: D:\Program\Java\jdk1.8.0_261> ...
            //Map<String, String> environment =  processBuilder.environment();
            //environment.entrySet().forEach(varEntry -> {
            //    System.out.println(String.format("<key: %s, value: %s>", varEntry.getKey(), varEntry.getValue()));
            //});

            // 获取命令行输出 | 等待外部进程结束
            int exitValue = process.waitFor();
            System.out.println("finished to execute the command, and the exit code : " + exitValue);

            // 关闭进程
            process.destroy();
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}
  • output

processTest()

9984 org/netbeans/Main
22180 org.jetbrains.jps.cmdline.Launcher
22244 com.intellij.rt.junit.JUnitStarter
31268 sun.tools.jps.Jps
18424 D:\Program\DBeaver-23-0-4\dbeaver\plugins\org.eclipse.equinox.launcher_1.6.400.v20210924-0641.jar
27368 org.jetbrains.jps.cmdline.Launcher
11788 cn.seres.bd.datasource.biz.DataSourceApplication
6604 org.jetbrains.idea.maven.server.RemoteMavenServer36
finished to execute the command, and the exit code : 0

processBuilderTest()

D:\Program\Java\jdk1.8.0_261\bin\java.exe -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\Program\IDEA\IDEA_COMMUNITY 2022.2\lib\idea_rt.jar=61044:D:\Program\IDEA\IDEA_COMMUNITY 2022.2\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\xxxx\AppData\Local\Temp\classpath2097328303.jar com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 test.java.ExecuteCommandTest,processBuilderTest

正在 Ping www.baidu.com [120.232.145.144] 具有 32 字节的数据:
来自 120.232.145.144 的回复: 字节=32 时间=44ms TTL=48
来自 120.232.145.144 的回复: 字节=32 时间=44ms TTL=48
来自 120.232.145.144 的回复: 字节=32 时间=45ms TTL=48
来自 120.232.145.144 的回复: 字节=32 时间=44ms TTL=48

120.232.145.144 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 44ms,最长 = 45ms,平均 = 44ms
<key: USERDOMAIN_ROAMINGPROFILE, value: XXXX>
...

3 参考文献

标签:执行命令,java,process,new,command,import,Java,SE
From: https://www.cnblogs.com/johnnyzen/p/17657106.html

相关文章

  • Pandas 使用教程 Series、DataFrame
    目录Series(一维数据)指定索引值使用key/value对象,创建对象设置Series名称参数DataFrame(二维数据)使用字典(key/value)创建loc属性返回指定行的数据Pandas一个强大的分析结构化数据的工具集,基础是Numpy(提供高性能的矩阵运算)Pandas可以从各种文件格式比如CSV、JSON、SQL、M......
  • SecureCRT通过脚本实现自动化登录
    1、配置登录主机名、用户和密码 2、配置登录后操作脚本目录 3、vbs操作脚本如下(crt也支持python)#$language="VBScript"#$interface="1.0"crt.Screen.Synchronous=TrueSubMain crt.Screen.Send"[email protected]"&chr(13) if(crt.Screen.Wait......
  • selenium自动化常用
    selenium使用:1、导入selenium模块2、启动浏览器driver=webdriver.chrome()driver.get('www.baidu.com')3、页面刷新driver.refresh()4、页面后退前进,driver.back(),driver.forward()5、设置窗口大小,driver,set_window_size(540,960)6、将浏览器窗口最大化,driver.maximiz......
  • 海康大华宇视等网络摄像机RTSP流采用websecket和H5进行RTSP网页无插件直播点播
    一.背景分析随着移动互联网时代的到来,安防监控领域为了适应互联网的发展要求,首先由国内安防监控龙头企业(海康、大华、宇视)带头先后开发了萤石云、乐橙云等互联网视频云服务,为广大个人或者企业监控用户提供的优质的视频互联网监控服务;而事实上,不管是海康大华等老牌监控厂商、还是新......
  • 利用Java实现文本到语音转换(TTS)的实用指南
    在现代技术发展的背景下,文本到语音转换(TTS)成为了一种非常有用的技术。TTS技术可以将文字转换成自然流畅的语音,提供更加人性化和便利的交互方式。本文将介绍如何使用Java来实现TTS功能,让我们一起来探索吧!引言文本到语音转换(TTS)是一种使计算机能够将文字转换成可听的语音的技术。它......
  • PDManger c# sqlserver数据库代码
    usingSystem;usingSystem.Collections.Generic;usingSqlSugar;$blankline{{vartoday=newDate();varfullYear=today.getFullYear();varmonth=today.getMonth()+1;vardays=today.getDate();varsqlSugartable='[SugarTable("......
  • [javase高级] HashMap实现原理
    HashMap是数组+链表实现的,既然用到hash散列,那么肯定不可避免的会出现冲突问题,HashMap解决冲突的方法是拉链法,因为这里有用到数组,那么当容量不足的时候就需要进行扩容操作了,在HashMap中有个术语叫冲突,当冲突几率越来越高的时候就需要进行扩容操作了那什么情况就叫冲突几率高呢?就是......
  • 【算法记录】Java - Base64编码解码源码
    Base64编码表索引对应字符索引对应字符索引对应字符索引对应字符0A17R34i51z1B18S35j5202C19T36k5313D20U37l5424E21V38m5535F22W39n5646G23X40o5757H24Y41p5868I25Z42q5......
  • 直播平台搭建,JSON.parseObject的几种用法
    直播平台搭建,JSON.parseObject的几种用法一.result格式: {  "success":"true",  "returnAddress":"123"} JSONObjectjsonObject=JSON.parseObject(result); //转换成objectJsonObject.getString("returnAddress") //获取object中ret......
  • docker-compose的简单使用并搭建zookeeper集群
    简介DockerCompose是一个用于定义和运行多容器Docker应用程序的工具。它能够简化在单个主机上使用多个容器的部署过程。使用DockerCompose,您可以使用简单的YAML文件来定义应用程序的服务、网络和卷,并通过单个命令一键启动、停止和重建整个应用程序。DockerCompose允许......