java USB闪存驱动器制造商序列号

5w9g7ksd  于 2023-04-10  发布在  Java
关注(0)|答案(3)|浏览(148)

如何在java中检索USB闪存驱动器的制造商序列号?
我看着这个
How to get manufacturer serial number of an USB flash drive?
但这对我没有帮助

whitzsjs

whitzsjs1#

我不认为有一个纯Java解决方案可以跨多个平台工作。
您可能需要“抓取”外部命令的输出。(或者弄清楚它们在做什么,然后在本机代码库中复制它...)
在Linux上:

  • “lsusb”命令的输出包括序列号。

在Windows上:

@FoggyDay已经找到了几个第三方库,据说可以支持这个:

  • jUSB显然只适用于GNU/Linux。
  • usb4java支持更广泛的平台。
  • 两者都依赖于特定于平台的本机库。

建议使用Files.getFileStore(path).getAttribute("volume:vsn")的评论是不正确的,我认为。Java源代码暗示这是返回由Windows分配的卷序列号,而不是制造商提供的序列号。相关代码在这里。

2admgd59

2admgd592#

jUSB库允许您从usb.core.Configuration读取此内容。
usb4java-另一个较新的Java库-可能也支持相同的功能。

t40tm48m

t40tm48m3#

这个方法可以帮助你读取USB的序列号

public static String getSerialNumber() {
    String command = "powershell.exe Get-WmiObject Win32_DiskDrive | Select-Object SerialNumber\n";
    String serialNumber = null;
    try {
        Process powerShellProcess = Runtime.getRuntime().exec(command);
        powerShellProcess.getOutputStream().close();
        BufferedReader stdout = new BufferedReader(new InputStreamReader(powerShellProcess.getInputStream()));
        String line;
        while ((line = stdout.readLine()) != null) {
            System.out.println("PowerShell output: " + line);
            if (!line.trim().isEmpty()) {
                serialNumber = line.trim();
            }
        }
        stdout.close();
        BufferedReader stderr = new BufferedReader(new InputStreamReader(powerShellProcess.getErrorStream()));
        while ((line = stderr.readLine()) != null) {
            System.out.println(line);
        }
        stderr.close();

    } catch (IOException e) {
        e.printStackTrace();
    }
    return serialNumber;
}

相关问题