1. 程式人生 > >java獲取win硬碟序列號等資訊

java獲取win硬碟序列號等資訊

獲取磁碟序列號

在java下獲取windows系統中的磁碟序列號,廢話少說直接上程式碼。

/**
     * 獲取windows硬碟序列號
     * @param drive
     * @return 硬碟序列號
     */
    public static String getWinHardiskSn(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";
    	      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){
    	    	if(Config.DEBUG){
					e.printStackTrace();
				}
    	    }
    	    return result.trim();
    	  }
在以上程式碼中使用了cscript工具獲取。CScript 是小型C語言編譯器,它的語法和C語言語法很接近,因此 CScript 的原始碼也可以用其他 C/C++編譯器進行編譯,例如Visual C++.CScript 可以生成中間程式碼機器碼.機器碼可以在 CScript IDE 中直接執行,也可以用來生成 EXE可執行檔案.CScript 支援呼叫DLL和COM(Component Object Model),它可以用來編寫OpenGL 和 DirectX 程式.另外您可以使用CScript程式設計介面在您自己的程式中增加對C語言指令碼的支援。

以上是在windows系統中獲取磁碟序列好的方法,在linux系統中執行

hdparm -i /dev/sda1

命令獲取磁碟序列號,不過要root許可權。在windows系統不涉許可權問題(但有些防毒軟體和防火牆會對程式進行攔截)。

獲取磁碟大小資訊

磁碟大小資訊是不涉及許可權問題的。

/**
    * 獲取win磁碟資訊
    * @return win磁碟資訊列表
    */
   public static ArrayList<HashMap<String, String>> getWinHardDiskInfo() {
	   HashMap<String, String> hashMap = null;
	   ArrayList<HashMap<String, String>> diskList = new ArrayList<HashMap<String,String>>();
	   File[] roots = File.listRoots();
	   for (File file : roots) {
		 hashMap = new HashMap<String, String>();
	     hashMap.put("disk", file.getPath());
	     hashMap.put("total",Long.toString(file.getTotalSpace()));
	     hashMap.put("free", Long.toString(file.getFreeSpace()));
	     //hashMap.put("sn", getWinHardiskSn(file.getPath()));
	     diskList.add(hashMap);
	     }
	   return diskList;
   }

在unix系統中可以執行
Runtime.getRuntime().exec("df");
df命令獲取然後再java中解析字元資訊可以獲取到,這裡不上code了。