java获取硬盘串口

标签 java linux

我正在尝试制作一个 java 程序,它将通过 cmd 或终端获取硬盘的序列号。我在两种操作系统(Windows、Linux)上都尝试过。我在使用 Linux 时遇到问题,当我键入 hdparm -I/dev/sda | 时它返回一个空格grep Serial 在终端中显示硬盘的序列号。

询问如何获取或显示序列号。

这是我的代码:

    private static String OS= System.getProperty("os.name").toLowerCase();
    private static String system;
    private static String serial;
    private void getVol(String drive)
    {
        String query=new String();
        if(isWindows())
        {
            query="cmd /c"+" vol "+drive+":";
        }
        else if(isUnix())
        {
            query="hdparm -I /dev/sda | grep Serial";
        }
        try
        {
            Runtime rt=Runtime.getRuntime();
            InputStream is=rt.exec(query).getInputStream();
            InputStreamReader isr=new InputStreamReader(is);
            BufferedReader br=new BufferedReader(isr);
            String line;
            if(isWindows())
            {
                br.readLine();
                line=br.readLine();
                line=line.substring(line.lastIndexOf(" ")+1);
                serial=line;
            }
            else if(isUnix())
            {
                line=br.readLine();
                serial=line;
            }
        }catch(IOException ex)
        {
            ex.printStackTrace();
        }
    }

    private static boolean isWindows() {
        return (OS.indexOf("win") >= 0);
    }
    private static boolean isUnix()
    {
        return (OS.indexOf("nux") >= 0);
    }

    public static void main(String args[])
    {
        MainClass f=new MainClass();
        f.getVol("C");
        System.out.println(serial);
    }

最佳答案

自发布以来已经有一段时间了,但@giusc 解决方案对我不起作用,所以为其他人发布我的研究。

在 Linux 上获取硬盘驱动器序列号:

public static void main(String[] args) throws Exception {

    String sc = "/sbin/udevadm info --query=property --name=sda"; // get HDD parameters as non root user
    String[] scargs = {"/bin/sh", "-c", sc};

    Process p = Runtime.getRuntime().exec(scargs);
    p.waitFor();

    BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); 
    String line;
    StringBuilder sb  = new StringBuilder();

    while ((line = reader.readLine()) != null) {
        if (line.indexOf("ID_SERIAL_SHORT") != -1) { // look for ID_SERIAL_SHORT or ID_SERIAL
            sb.append(line);
        }    
    }

    System.out.println("HDD Serial number:" + sb.toString().substring(sb.toString().indexOf("=") + 1));
}

获取硬盘驱动器序列号(制造商)Windows:

public static void main(String[] args) {
    String sc = "cmd /c" + "wmic diskdrive get serialnumber";

    Process p = Runtime.getRuntime().exec(sc);
    p.waitFor();

    BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));

    String line;
    StringBuilder sb = new StringBuilder();

    while ((line = reader.readLine()) != null) {
        sb.append(line);
    } 

    System.out.println("HDD Serial number: " + sb.substring(sb.toString().lastIndexOf("r") + 1).trim());
}

关于java获取硬盘串口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25599648/

相关文章:

java - 数组列表对象作为隐式参数

linux 上的 java unicode 转换不适用于 mac os x

java - ANTLR/java/SDK 生成-编译-执行序列在 Windows10 命令窗口中失败

java - 无法启动 Activity ComponentInfo{MainFrag} : java. lang.NullPointerException

用于提取 IP 地址的 Linux bash 脚本

linux - Windows 10 上的 Bash,没有循环设备

linux - 如何将文件从AWS服务器传输到AWS服务器位于Bastion服务器后面的本地计算机

linux - 使用 netcat 和 UDP 的反向 shell 不工作

java - Keycloak:自定义端点的 REST url

java - 如何设置客户端文件夹路径(如 D ://new folder) for download file in spring contoller?