侧边栏壁纸
博主头像
张种恩的技术小栈博主等级

行动起来,活在当下

  • 累计撰写 747 篇文章
  • 累计创建 65 个标签
  • 累计收到 39 条评论

目 录CONTENT

文章目录

使用Java执行外部程序

zze
zze
2019-11-06 / 0 评论 / 0 点赞 / 618 阅读 / 1682 字

不定期更新相关视频,抖音点击左上角加号后扫一扫右方侧边栏二维码关注我~正在更新《Shell其实很简单》系列

在 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

评论区