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: 错误: 预期分号
System.out.println("欢迎来到Tutorialspoint!!")
^
1 错误
步骤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");
}
}
将上面的java文件编译成“javac Process.java”,然后在你系统的命令行界面中使用“java Process”运行。
输出
Successfully Executed
Check your Output file
输出快照
我们可以在output.txt文件中看到“OnlineJudge.java”的输出结果-
一次我们故意在第3行末尾漏掉了分号,以检查错误日志是否被重定向到error.txt文件中。你可以在这里看到错误日志。
结论
我们通过介绍在线评测系统及其使用案例来开始了本文。随后,我们了解了ProcessBuilder类及其用法。下一节讨论了使用ProcessBuilder创建在线评测平台的所有必要步骤。这个平台不仅可以执行Java程序,还可以执行其他编程语言,如C和C ++。我们只需要更改传递给ProcessBuilder实例的命令即可。