Java调用命令行运行C程序

需求

运行C程序
获取C程序的输出、报错

环境

Windows 10

工具

eclipse IDE 2021-03
JDK 8
MinGW

步骤

1.编写C程序
#include 

int main(void) {
    printf("hello world");
    return 0;
}
2.存放C程序

将上述程序命名为"hello.c"
存放在"c:"下
路径:"c:\hello.c"

3.利用cmd先尝试运行

(在配置好环境变量的情况下)

// 模板
1.    gcc -o [期望的文件.exe] [已有的文件.c]  // 将.c文件编译为.exe文件
2.    [期望的文件.exe]  // 运行.exe文件
// 实例
gcc -o c:\result.exe c:\hello.c // 编译
c:\result.exe // 运行
// cmd上显示“hello world!”
4.利用Java去调用cmd编译、运行
public class Main {
    public static void main(String[] args) {
        try {
            Process process = Runtime.getRuntime().exec("gcc -o c:/result.exe c:/hello.c");  // 编译
            process = Runtime.getRuntime().exec("c:/result.exe");  // 运行
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}
// 注:在eclipse中运行
5.如何获取cmd输出?

查看JDK 8 API,发现getInputStream()方法,其返回类型为InputStream

1.InputStream,输入流,表示向Java程序输入
2.我们逐行读取流,再向标准输出打印
3.在eclipse控制台获取C程序的结果

6.对【4】进行代码补充
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) {
        try {
            Process process = Runtime.getRuntime().exec("gcc -o c:\\result.exe c:\\hello.c"); // 编译
            process = Runtime.getRuntime().exec("c:\\result.exe"); // 运行
            BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); // 手动在此设立flag
            String line = null;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
            br.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
// 注:在eclipse中运行

// eclipse控制台成功输出“hello world!”

还有一个getErrorStream()方法,返回类型也是InputStream
是返回程序编译、运行过程中的报错的
可将flag位置的getInputStream()替换为getErrorStream(),即实现报错输出

若程序报错,则getInputStream()的内容为空
若程序正常,则getErrorStream()的内容为空

你可能感兴趣的:(Java调用命令行运行C程序)