java中如何运行本地命令呢?
下文笔者讲述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()方法来等待进程结束 并获取进程的返回值 可确保进程正常结束 可根据返回值进行进一步处理。
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。