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 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告