java中如何运行本地命令呢?

欣喜 Java经验 发布时间:2025-02-13 10:06:14 阅读数:11191 1
下文笔者讲述java代码中运行本地命令的方法分享,如下所示

java运行本地命令的示例

在java中运行本地命令,可实现调用第三方工具类
   那么如何实现呢?下文笔者将一一道来其实现方式,如下所示
=========================================================
    通过Runtime.getRuntime().exec调用命令
    使用ProcessBuilder类来构建和执行命令

Runtime.getRuntime().exec运行本地命令

Runtime.getRuntime().exec()
  在Java中用于运行操作系统命令
  它允许你在Java程序中执行外部命令
  并获取命令的输出和错误信息 

实现思路:
	创建一个Runtime对象,通过调用Runtime.getRuntime()方法获取。
	调用exec()方法,传入要执行的命令和参数。
	exec()方法返回一个Process对象,表示正在执行的进程。
	使用Process对象的方法来获取输出、错误流和返回值。
     public static void executeLocalCommand(String command) {
        try {
            // 执行命令
            Process process = Runtime.getRuntime().exec(command);

            try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
                 BufferedReader errorReader = new BufferedReader(new InputStreamReader(process.getErrorStream()))) {

                String line;
                while ((line = reader.readLine()) != null) {
                    log.info(command + ",命令执行结果:", line);
                }

                while ((line = errorReader.readLine()) != null) {
                    // 输出标准错误(stderr),标记为错误信息
                    if (line.startsWith("[ERROR]")) {
                        log.error(command + ",命令执行错误:", line);
                    } else {
                        log.warn(command + ",[WARNING]" + line);
             。。。
注意事项:
    如使用管道符和重定向机制
	 可考虑使用ProcessBuilder类来构建和执行命令

ProcessBuilder

ProcessBuilder 
  在Java中用于创建和控制操作系统进程的类
  ProcessBuilder方法比Runtime.exec()
  ProcessBuilder方法用于处理命令行参数、错误流和输入流
                    并支持管道和重定向

==================================================
实现思路:
    创建一个ProcessBuilder对象,并传入要执行的命令和参数
    调用start()方法启动进程
    使用Process对象的方法来获取输出、错误流和返回值
package com.java265;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        String[] command = {
                "ls",
                "-l"
        };
        // 创建ProcessBuilder对象,并传入要执行的命令和参数
        ProcessBuilder processBuilder = new ProcessBuilder(command);

        // 启动进程
        Process process = null;
        try {
            process = processBuilder.start();
            // 获取输出流
            try (
                    BufferedReader outputReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
                    BufferedReader errorReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));) {
                String line;
                while ((line = outputReader.readLine()) != null) {
                    System.out.println(line);
                }
                while ((line = errorReader.readLine()) != null) {
                    // 输出标准错误(stderr),标记为错误信息
                    if (line.startsWith("[ERROR]")) {
                        System.out.println(command + ",命令执行错误:" + line);
                    } else {
                        System.out.println(command + ",[WARNING]" + line);
                    }
                }
                // 等待进程执行完成,并获取返回值
                int exitCode = process.waitFor();
                System.out.println("Exit code: " + exitCode);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        } catch (InterruptedException | IOException e) {
            throw new RuntimeException(e);
        }
    }
}

以上代码运行结果

以上代码将
  运行 ls -l 命令
  并将运行信息打印到控制台
ProcessBuilder使用注意事项
   ProcessBuilder可处理命令行参数
     可通过将参数作为字符串数组传递给ProcessBuilder构造函数来传递多个参数
     可使用redirectErrorStream(true)方法
	    将错误流合并到输出流中,
		 可同时读取标准输出和错误输出。
    在进程运行完成后
	 调用Process对象的waitFor()方法来等待进程结束
	  并获取进程的返回值
	    可确保进程正常结束
		 可根据返回值进行进一步处理。
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202502/17394124258294.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者