如何使用java獲取硬盤的序列號?如何使用java獲取硬盤序列號?
回答
該序列號是由操作系統創建的,其中格式化驅動器,它不是製造商編號。它是獨一無二的,因爲它是基於當前時間信息即時創建的。 AFAIK,沒有返回製造商SN的API。充其量,HD固件的SN可以被讀取,但是這將涉及一些非常低級別的API調用。請記住,即使您獲得該號碼,也不保證它是唯一的,因爲每個製造商都可以按照他們的意願分配SN。
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);
}
}
1.首先請求硬盤序列號的人,而不是分區之一 2。其次,你的代碼工作不正常,因爲我的Win7系統+ Java 7甚至產生了負面結果(我甚至隔離了Visual Basic腳本並執行,仍然是錯誤的) – Alex 2012-12-05 13:25:22
@Alex我認爲你比我們更天才... 。你應該知道當某人接受答案時意味着它對他有效......先閱讀答案定義,然後倒退。我清楚了嗎? – 2012-12-05 15:13:34
如果我的答案錯了,請解釋它,但不要提出諷刺意見。除了我保留我以前的意見(因爲我重新閱讀整個東西)和我的downvote。 – Alex 2012-12-05 20:20:26
我想你會不得不在C或C++中實現該功能,並使用JNI從Java訪問它。
Java在沒有硬盤驅動器的虛擬機上運行只有文件和文件系統。您應該能夠通過運行Java的approriate命令行實用程序來獲取此信息。
一個Linux可以做
hdparm -i /dev/hda
如果您使用的是Windows操作系統是Win7的SP1或更高版本,你可以簡單地在Java程序中執行以下cmd命令,通過WMIC得到它。
wmic diskdrive get serialnumber
如果該命令返回「無效的XML內容。」你可能想在here描述應用的修補程序文件。
好消息是FileStore對象的volume:vsn
屬性。
for (FileStore store: FileSystems.getDefault().getFileStores()) {
System.out.format("%-20s vsn:%s\n", store, store.getAttribute("volume:vsn"));
}
輸出看起來像一個int(例如-1037833820
,194154
)
壞消息是專用於測試目的窗口,因爲他們在WindowsFileStore jdk8u source說。可能在其他平臺以及未來工作,或者不在。
其他選項(JNI,執行和解析CLI)也取決於系統。更精巧但更改運行時可能不會突然中斷。但我認爲屬性解決方案非常簡單,我完全贊同它,直到我有更好的東西。
Windows機器上,你可以使用
public static String getSerialKey(Character letter) throws Exception{
String line = null;
String serial = null;
Process process = Runtime.getRuntime().exec("cmd /c vol "+letter+":");
BufferedReader in = new BufferedReader(
new InputStreamReader(process.getInputStream()));
while ((line = in.readLine()) != null) {
if(line.toLowerCase().contains("serial number")){
String[] strings = line.split(" ");
serial = strings[strings.length-1];
}
}
in.close();
return serial;
}
- 1. 如何獲取硬盤序列號?
- 2. 如何獲取使用cmd的硬盤序列號
- 3. 如何獲得SCSI硬盤序列號?
- 4. 使用Powershell獲取硬盤驅動器序列號
- 5. 如何從Mac硬盤獲取序列號?
- 6. 使用java獲取計算機中硬盤的真實序列號
- 7. 如何獲得python中的硬盤驅動程序序列號
- 8. 如何獲得在C或ASM硬盤序列號不WMI
- 9. 如何使用Java獲取Ram大小和硬盤大小?
- 10. 獲取USB硬盤的序列號(Mac OS)
- 11. 獲取其中所有硬盤和分區的序列號
- 12. 獲取客戶端系統的硬盤序列號
- 13. 如何獲得硬盤序列號在服務器端使用PHP
- 14. 如何在沒有WMI的情況下獲取硬盤序列號?
- 15. 獲取硬盤的驅動器號
- 16. 如何使用WMI獲取邏輯磁盤特定硬盤?
- 17. 確定單聲道硬盤序列號?
- 18. 使用C#獲取硬盤速度
- 19. 如何藉助ip地址獲取硬件設備序列號?
- 20. java越來越硬盤序列
- 21. 如何從硬盤獲取Dll路徑?
- 22. 使用C#中的WMI查詢通過驅動器盤符獲取硬盤驅動器序列號
- 23. 獲得真正的硬盤序列號與德爾福
- 24. 如何使用Cocoa獲得序列號(處理器托盤)
- 25. 如何從java中獲取硬盤中的圖像進入Bufferdimage
- 26. 如何從驅動器號查找音量序列號或硬盤號
- 27. 如何獲得OS X上USB驅動器的硬盤序列號?
- 28. 如何獲得本地主機上的PHP的硬盤序列號
- 29. 如何獲得處理器和硬盤製造序列號和ID?
- 30. 如何使用CMD獲取硬盤信息
對於您可以使用WMI窗口。 – 2011-03-30 06:58:57
順便說一句 - 如果你這樣做是爲了防止盜竊軟件的人,你已經'失去了'。 – 2011-03-30 07:13:59
@thompson您對該評論的含義是什麼? – developer 2011-03-30 07:17:21