Java 程序获取 Windows 和 Linux 机器的系统主板序列号

javaobject oriented programmingprogramming更新于 2024/8/5 19:48:00

主板序列号是分配给计算机主板的 ID。它通常用于跟踪计算机系统,也用于识别系统丢失或被盗的时间。在本节中,我们将讨论使用 Java 编程语言查找 Windows 和 Linux 机器的主板序列号的不同方法。

主板是计算机中非常重要的部分。它是计算机的骨干。计算机中的所有组件都通过主板进行通信。主板有助于确定我们将获得的 RAM 数量等因素,主板有助于配置硬件,也有助于启动过程。主板的序列号是帮助识别主板的唯一编号。

让我们首先讨论一下我们将在程序中使用的重要方法和语法 -

Runtime.getRuntime().exec() - 它是 Java 中 Runtime 类中存在的方法。此方法用于将命令行命令作为进程执行,稍后可以与之交互。它以字符串作为参数,即命令行命令并输出命令的进程对象。

Runtime.getRuntime().exec(command) ; // 将命令作为进程执行。

BufferedReader() − BufferedReader() 方法是 Java 中 BufferedReader 类的构造函数,并返回 BufferedReader 对象,该对象可帮助我们从文件或网络套接字等读取文本。它将数据读取为字节并将其转换为字符。它以 FileReader 或 InputStreamReaader 类的对象作为参数。

BufferedReader r = new BufferedReader(new InputStreamReader(System.in));

readLine() − 这是 Java 中 Bufferreader 类中的方法,它逐行读取字符流并将它们作为字符串返回。此方法用于从 BufferedReader 对象读取行。

BufferedReader reader = new BufferedReader(new FileReader("input.txt"));
PrintWriter writer = new PrintWriter(new FileWriter("output.txt"));
while ((line = reader.readLine()) != null) { //在 BufferReader 对象上逐行读取
    writer.println(line.toUpperCase()); // 写入 output.txt 文件。
}

trim() − 此方法用于删除字符串开头和结尾的空格。这是 Java 的 String 类中的方法。

tring str = " Hello, World! ";
System.out.println(str.trim()); // 输出:"Hello, World!"

现在我们将使用示例详细讨论如何查找 Windows 和 Linux 系统的主板序列号。

适用于 Windows 机器的方法

在此方法中,我们将使用 "wmic",这是一个用于 Windows 管理的命令行工具。"Wmic"代表"Windows 管理规范命令行"。它帮助我们找到 Windows 机器的主板序列号。

算法:使用 WMI(Windows 管理规范)

  • 通过传递 wmic baseboard get serialnumber 作为参数,使用 Runtime.getRuntime().exec() 方法创建一个进程对象

  • 使用 InputStreamReader 作为参数创建一个 BufferedReader 对象以读取进程的输出

  • 使用 readLine() 方法读取输出并将其存储在 line 变量中

  • 使用 trim() 修剪空格并打印输出,直到 readLine() 不为空。

示例

在此示例中,代码使用命令行实用程序 "wmic"(Windows 管理规范命令)检索当前系统的 ProcessorId。

A使用 Runtime 类的 exec() 方法创建新的 Process 对象,并将命令 "wmic baseboard get serialnumber" 作为参数传递。此命令检索当前系统 CPU 的 ProcessorId。

在下一个语句中,使用 getOutputStream() 方法关闭进程,并在返回的流上调用 close()。这是因为任何内容都要写入进程。现在创建一个新的 BufferedReader 对象,并使用 Process 对象的 getInputStream() 方法用进程的输入流对其进行初始化。

BufferedReader 对象用于读取进程的输出。最后,代码使用 BufferedReader 对象的 readLine() 方法逐行读取进程的输出。如果该行不为空,代码将修剪该行并使用 System.out.println() 将其打印到控制台。

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
   public static void main(String[] args) {
      try {
         Process process = Runtime.getRuntime().exec("wmic baseboard get serialnumber");
         BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
         String line;
            while ((line = reader.readLine()) != null) {
            if (!line.trim().equals("SerialNumber")) {
               System.out.println("主板序列号: " + line.trim());
            }
         }
         reader.close();
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
}

输出

主板序列号: MB-1234567890

Linux 机器的方法

在此方法中,我们从 Linux 系统读取文件以获取主板序列号。要通过代码读取的文件位于 /sys/class/dmi/id/board_serial。它是位于 Linux 系统上的 sysfs 文件系统中的文件,其中包含当前系统主板的序列号。 sysfs 是一个虚拟文件系统,它提供了系统硬件设备及其属性的视图。

算法

  • 使用 /sys/class/dmi/id/board_serial 作为参数创建 BufferedReader 对象。

  • 使用 readLine() 方法读取输出并将其存储在 line 变量中。

  • 打印行。

示例

在此方法中,我们将读取位于 '/sys/class/dmi/id/board_serial' 的文件。我们使用 BufferReader 对象读取该文件,并将文件位置作为参数传递给 BufferReader 构造函数。然后,我们使用 readLine() 方法读取内容并将其存储在 BufferReader 对象的变量中。存储值后,我们将打印输出。

import java.io.BufferedReader;
import java.io.FileReader;

public class Main {
   public static void main(String[] args) {
      try {
         BufferedReader reader =newBufferedReader( newFileReader("/sys/class/dmi/id/board_serial"));
         String line = reader .readLine();
         System.out.println("主板序列号: " + line);
         reader.close();
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
}

输出

主板序列号: MB-1234567890

因此,我们在本文中讨论了如何使用 Java 编程语言查找 Windows 和 Linux 机器的主板序列号。


相关文章