Java 中使用 ProcessBuilder 创建一个基本的在线评测系统
在线评测系统是一个用于编译、执行和评估给定问题编程解决方案的平台。它广泛用于解决问题和组织编程比赛。要使用 ProcessBuilder 类在 Java 中创建一个基本的在线评测系统,请定义一个 ProcessBuilder 实例,并将程序名称和命令作为参数指定。
ProcessBuilder 类用于创建和管理操作系统进程。它允许我们链接多个进程,其中一个进程的输出可以用作另一个进程的输入。此外,它还提供各种内置方法,例如 redirectOutput()、redirectInput()、redirectError() 等,以有效地处理进程。
使用 ProcessBuilder 创建在线评测系统的步骤
我们需要按照以下逻辑和组织方式遵循一系列步骤:
步骤 1
创建一个名为“OnlineJudge.java”的 Java 源代码文件。然后,将以下代码复制并粘贴到该文件中。
示例
public class OnlineJudge { public static void main(String[] args) { System.out.println("Welcome to Tutorialspoint!!") } }
输出
OnlineJudge.java:3: error: ';' expected
System.out.println("Welcome to Tutorialspoint!!")
^
1 error
步骤 2
在您的本地系统中创建两个文本文件。一个用于存储代码编译和执行过程中遇到的错误。另一个用于保存代码成功执行后的输出。
我们创建并命名了以下文件:
“error.txt”
“output.txt”
步骤 3
现在,创建另一个名为“Process.java”的 Java 文件。将以下代码复制并粘贴到该文件中
让我们讨论一下代码的算法。
算法
创建一个“ProcessBuilder”类的实例,并将用于编译 Java 程序文件的命令作为参数传递给它的构造函数。编译命令为“javac className.java”。
将“error.txt”文件的路径作为参数传递给“File”类的构造函数。我们将使用“redirectError()”方法将错误重定向到此文件。
使用内置方法“start()”启动第一个进程。
再次创建一个“ProcessBuilder”类的实例,并将用于执行 Java 程序文件的命令作为参数传递给它的构造函数。执行命令为“java className”。
将“output.txt”文件的路径作为参数传递给“File”类的构造函数。我们将使用“redirectOutput()”方法将输出重定向到此文件。
使用内置方法“start()”开始执行第二个进程。
示例
import java.io.*; import java.util.*; public class Process { public static void main(String[] args) throws IOException, InterruptedException { // To compile the code with the javac command ProcessBuilder pb1 = new ProcessBuilder("javac", "OnlineJudge.java"); // To print the error into error file File error = new File("D:/Java Programs/error.txt"); pb1.redirectError(error); pb1.start(); // starting the process // Execute the code using the java.classname command ProcessBuilder pb2 = new ProcessBuilder("java", "OnlineJudge"); // To print the output into output file File output = new File("D:/Java Programs/output.txt"); pb2.redirectOutput(output); pb2.start(); // starting the process System.out.println("Successfully Executed"); System.out.println("Check your Output file"); } }
使用“javac Process.java”编译上述 Java 文件,并在系统命令行界面上使用“java Process”运行。
输出
Successfully Executed Check your Output file
输出快照
我们可以在 output.txt 文件中看到“OnlineJudge.java”的输出 -
一旦我们故意在第 3 行末尾省略分号以检查错误日志是否被重定向到 error.txt 文件。您可以在此处查看错误日志。
结论
我们从介绍在线评测系统及其用例开始本文。稍后,我们了解了 ProcessBuilder 类及其用途。下一部分讨论了使用 ProcessBuilder 创建在线评测平台所需的所有步骤。此平台不仅可以执行 Java 程序,还可以执行其他编程语言,如 C 和 C++。我们只需要更改传递给 ProcessBuilder 实例的命令即可。