java中使用cmd命令-并接收返回值

本文详细介绍了在Java编程中如何使用Runtime或ProcessBuilder类来执行CMD命令,并如何捕获和处理命令的输出及返回值,这对于在Java应用中集成系统命令操作非常实用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.nio.charset.Charset;

public class ZcMain {

    public static void main(String[] args){
        System.out.println("开始");
        String commandStr = "ping www.baidu.com";
        ZcMain.exeCmd(commandStr);
        System.out.println("结束");
    }

    public static void exeCmd(String commandStr) {
        BufferedReader br = null;
        try {
	        //执行cmd命令
            Process p = Runtime.getRuntime().exec(commandStr);
            //返回值是流,以便读取。
            br = new BufferedReader(new InputStreamReader(p.getInputStream(), Charset.forName("GBK")));
            String line = null;
            StringBuilder sb = new StringBuilder();
            while ((line = br.readLine()) != null) {
                sb.append(line + "\n");
            }
            System.out.println(sb.toString());
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (br != null){
                try {
                    br.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

}

### Java执行远程Shell命令的示例教程 在Java中可以通过JSch库实现SSH协议下的远程Shell命令执行。以下是详细的说明以及代码示例。 #### 使用JSch库 JSch是一个用于支持SSH协议的Java库,能够帮助开发者轻松地建立SSH连接执行远程操作[^1]。为了使用该库,首先需要将其加入项目的依赖项中。如果是Maven项目,则可以在`pom.xml`文件中添加如下依赖: ```xml <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.55</version> </dependency> ``` #### 实现远程Shell命令执行的核心逻辑 下面展示了一个完整的例子,演示如何通过Java中的JSch库执行远程Shell命令捕获其返回值。 ```java import com.jcraft.jsch.*; public class RemoteShellExecutor { private static final int PORT = 22; public static void main(String[] args) { try { String host = "your.remote.server.ip"; String user = "username"; String password = "password"; String command = "ls -l"; JSch jsch = new JSch(); Session session = jsch.getSession(user, host, PORT); session.setPassword(password); // Avoid asking for key confirmation java.util.Properties config = new java.util.Properties(); config.put("StrictHostKeyChecking", "no"); session.setConfig(config); System.out.println("Establishing connection..."); session.connect(); Channel channel = session.openChannel("exec"); ((ChannelExec) channel).setCommand(command); // 获取输入流以便读取命令输出 InputStream in = channel.getInputStream(); channel.connect(); byte[] tmp = new byte[1024]; while (true) { while (in.available() > 0) { int i = in.read(tmp, 0, 1024); if (i < 0) break; System.out.print(new String(tmp, 0, i)); } if (channel.isClosed()) { System.out.println("Exit status: " + channel.getExitStatus()); break; } Thread.sleep(1000); } channel.disconnect(); session.disconnect(); } catch (Exception e) { e.printStackTrace(); } } } ``` 上述代码展示了如何创建一个Session对象通过它打开一个执行通道(Channel),设置待执行的命令后启动通道,最终断开连接[^2]。 #### 处理多个Shell命令 当有多个Shell命令需要被执行时,可以根据实际需求选择不同的分隔方式。例如,使用`;`可以让所有命令按顺序依次运行而不考虑前一条命令的结果;而使用`&&`则只有当前面所有的命令均成功完成后才继续下一条命令[^3][^4]。 #### 获取远程Shell命令返回值 除了简单的打印输出外,有时还需要处理更复杂的场景——比如根据特定条件筛选某些进程的信息或者解析日志数据等。这时可以编写专门的方法来接收这些信息将它们转化为易于管理的形式,如列表或映射表结构[^5]。 ```java public static List<String> executeRemoteCommandsAndGetResults(String... commands) throws Exception { List<String> results = new ArrayList<>(); for (String cmd : commands){ StringBuilder outputBuffer = new StringBuilder(); JSch jsch = new JSch(); Session session = jsch.getSession("user", "host", 22); session.setPassword("pass"); Properties config = new Properties(); config.put("StrictHostKeyChecking", "no"); session.setConfig(config); session.connect(); Channel channel=session.openChannel("exec"); ((ChannelExec)channel).setCommand(cmd); InputStream in=channel.getInputStream(); channel.connect(); BufferedReader reader=new BufferedReader(new InputStreamReader(in)); String line; while((line=reader.readLine())!=null){ outputBuffer.append(line).append("\n"); } channel.disconnect(); session.disconnect(); results.add(outputBuffer.toString().trim()); } return results; } ``` 此方法接受一系列字符串形式的命令作为参数,逐一发送给目标主机上的shell解释器去执行,最后收集各次调用所产生的标准输出内容存入List集合里供后续分析之用。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值