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 实例的命令即可。

更新于:2023年7月21日

206 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告