java獲取win硬碟序列號等資訊
阿新 • • 發佈:2019-01-26
獲取磁碟序列號
在java下獲取windows系統中的磁碟序列號,廢話少說直接上程式碼。
在以上程式碼中使用了cscript工具獲取。CScript 是小型C語言編譯器,它的語法和C語言語法很接近,因此 CScript 的原始碼也可以用其他 C/C++編譯器進行編譯,例如Visual C++.CScript 可以生成中間程式碼和機器碼.機器碼可以在 CScript IDE 中直接執行,也可以用來生成 EXE可執行檔案.CScript 支援呼叫DLL和COM(Component Object Model),它可以用來編寫OpenGL 和 DirectX 程式.另外您可以使用CScript程式設計介面在您自己的程式中增加對C語言指令碼的支援。/** * 獲取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(); }
以上是在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了。