Java – Get the real serial number of Hard-Disk in computer using java

hard drivejavaserial number

I've been trying this code, but I wonder the output is not the serial number (SN). The result only contains the number without alphabet. I wonder, it must be the combination between number and alphabet.

Here is the code :

import java.io.File;
import java.io.FileWriter;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class DiskUtils {
    private DiskUtils() {  }

    public static String getSerialNumber(String drive) {
        String result = "";
        try {
            File file = File.createTempFile("realhowto",".vbs");
            file.deleteOnExit();
            FileWriter fw = new java.io.FileWriter(file);

            String vbs = "Set objFSO = CreateObject(\"Scripting.FileSystemObject\")\n"
                        +"Set colDrives = objFSO.Drives\n"
                        +"Set objDrive = colDrives.item(\"" + drive + "\")\n"
                        +"Wscript.Echo objDrive.SerialNumber";  // see note
            fw.write(vbs);
            fw.close();
            Process p = Runtime.getRuntime().exec("cscript //NoLogo " + file.getPath());
            BufferedReader input =
              new BufferedReader
                (new InputStreamReader(p.getInputStream()));
            String line;
            while ((line = input.readLine()) != null) {
               result += line;
            }
            input.close();
        }
        catch(Exception e){
            e.printStackTrace();
        }
        return result.trim();
    }

    public static void main(String[] args){
      String sn = DiskUtils.getSerialNumber("C");
      javax.swing.JOptionPane.showConfirmDialog((java.awt.Component)
           null, sn, "Serial Number of C:",
           javax.swing.JOptionPane.DEFAULT_OPTION);
    }
}

Then, i also have tried to proof the real SN that may be true (contains number and alphabet).
Here is the tutorial that I got to check the real SN of hard-disk :

  1. Open up a command prompt window (Start Menu > All Programs > Accessories > Command Prompt).
  2. Type in: vol.
  3. The Volume Serial Number is the Disk Serial Number.

The result between the code and the tutorial has really a big different.
Do you guys know, which one is true ? And how to proof that ?

Best Answer

You might want to try something more along the lines of this:

import java.io.*;

public class SerialNumber
{
  public String executeVolCommand()
  {
    String NEWLINE = System.getProperty("line.separator");
    StringBuffer buffer = new StringBuffer();
    try{

      Process pb = new ProcessBuilder("cmd","/c", "vol").start();  
      InputStream in = pb.getInputStream();  
      BufferedReader br = new BufferedReader(new InputStreamReader(in));  
      String line;  
      while ((line = br.readLine()) != null) {  
        buffer.append(line + NEWLINE);  
      }
    }
    catch(Exception e){e.printStackTrace();}
    return buffer.toString();      }
}

Then, once you have the result, you can parse it for the actual serial number. Hope this helps.