侧边栏壁纸
博主头像
张种恩博主等级

一个能运维的 JPG 搬运工

  • 累计撰写 705 篇文章
  • 累计创建 61 个标签
  • 累计收到 25 条评论

目 录CONTENT

文章目录

使用Java执行外部程序

张种恩
2019-11-06 / 0 评论 / 0 点赞 / 313 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2020-02-25,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

在 Java 中可以使用 RunTime 类和 ProcessBuilder 类两种方式来执行外部程序,下面以调用 ping 程序做两个示例。

import org.junit.Test;

import java.io.InputStream;
import java.io.InputStreamReader;

public class TestRunProcess {

    /**
     * ProcessBuilder 方式
     */
    @Test
    public void testProcessBuilder()throws Exception {
        // 创建 ProcessBuilder 对象
        ProcessBuilder processBuilder = new ProcessBuilder();
        // 设置第三方应用程序的命令
        processBuilder.command("ping","192.168.202.143");
        // 将标准输入流和错误流合并,类似 bash 中的 &> 操作
        processBuilder.redirectErrorStream(true);
        // 启动一个进程
        Process process = processBuilder.start();
        // 通过标准输入流拿到输出信息
        InputStream inputStream = process.getInputStream();
        printInputStreamAsString(inputStream);
    }

    /**
     * Runtime 方式
     */
    @Test
    public void testRuntime() throws Exception{
        Runtime runtime = Runtime.getRuntime();
        Process process = runtime.exec("ping 192.168.202.143");
        printInputStreamAsString(process.getInputStream());
    }

    /**
     * 将输入流转字符串并输出
     */
    private void printInputStreamAsString(InputStream inputStream) throws Exception {
        // 转成字符流
        InputStreamReader reader = new InputStreamReader(inputStream, "gbk");
        // 字符缓冲
        char[] chars = new char[1024];

        int len = -1;
        while((len = reader.read(chars))!=-1){
            String str = new String(chars, 0, len);
            System.out.println(str);
        }
        inputStream.close();
        reader.close();
    }
}
0

评论区