温馨提示×

java exec 如何处理输入输出

小樊
82
2024-12-03 08:33:11
栏目: 编程语言

在Java中,可以使用ProcessBuilder类来创建和管理外部进程,并通过Process类的输入输出流来处理子进程的输入和输出。以下是一个简单的示例,展示了如何使用Java执行外部命令并处理其输入输出:

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

public class JavaExecExample {
    public static void main(String[] args) {
        try {
            // 创建一个ProcessBuilder对象,传入要执行的命令和参数
            ProcessBuilder processBuilder = new ProcessBuilder("your-command", "arg1", "arg2");

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

            // 获取子进程的输入流,用于向子进程发送数据
            InputStream inputStream = process.getInputStream();

            // 获取子进程的输出流,用于接收子进程的输出数据
            OutputStream outputStream = process.getOutputStream();

            // 创建一个BufferedReader,用于读取子进程的输出数据
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));

            // 创建一个OutputStreamWriter,用于向子进程发送数据
            OutputStreamWriter writer = new OutputStreamWriter(outputStream);

            // 向子进程发送数据
            writer.write("your-input-data\n");
            writer.flush();

            // 关闭OutputStreamWriter和BufferedReader
            writer.close();
            reader.close();

            // 等待子进程执行完成
            int exitCode = process.waitFor();
            System.out.println("子进程执行完毕,退出码: " + exitCode);

        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中,我们首先使用ProcessBuilder创建了一个外部进程,然后获取了子进程的输入流和输出流。接下来,我们使用OutputStreamWriter向子进程发送数据,并使用BufferedReader读取子进程的输出数据。最后,我们等待子进程执行完成并输出其退出码。

请注意,这个示例仅用于演示目的,实际应用中可能需要根据具体需求对代码进行调整。

0