我正在尝试制作一个 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/