獲取MAC地址首先要理解當前的操作系統,由于在不同的操作系統中CMD命令所在的位置不同,因此首先使用System類中的getProperty("os.name")方法獲取當前的操作系統,getProperty()方法可以確定當前系統屬性,它的參數是一些固定的鍵值。
java.version Java 運行時環境版本
java.vendor Java 運行時環境供應商
java.vendor.url Java 供應商的 URL
java.home Java 安裝目錄
java.vm.specification.version Java 虛擬機規范版本
java.vm.specification.vendor Java 虛擬機規范供應商
java.vm.specification.name Java 虛擬機規范名稱
java.vm.version Java 虛擬機實現版本
java.vm.vendor Java 虛擬機實現供應商
java.vm.name Java 虛擬機實現名稱
java.specification.version Java 運行時環境規范版本
java.specification.vendor Java 運行時環境規范供應商
java.specification.name Java 運行時環境規范名稱
java.class.version Java 類格式版本號
java.class.path Java 類路徑
java.library.path 加載庫時搜索的路徑列表
java.io.tmpdir 默認的臨時文件路徑
java.compiler 要使用的 JIT 編譯器的名稱
java.ext.dirs 一個或多個擴展目錄的路徑
os.name 操作系統的名稱
os.arch 操作系統的架構
os.version 操作系統的版本
file.separator 文件分隔符(在 UNIX 系統中是“/”)
path.separator 路徑分隔符(在 UNIX 系統中是“:”)
line.separator 行分隔符(在 UNIX 系統中是“/n”)
user.name 用戶的賬戶名稱
user.home 用戶的主目錄
user.dir 用戶的當前工作目錄
在確認了CMD命令的位置之后,使用Runtime類中的exec()方法來執行指定的DOS命令,經放置在InputStream對象中,遍歷結果中的每一行,獲取帶有“Phusical Address”字樣的行,將后面的MAC地址返回就可以了。
總結一下,獲取計算機MAC地址的總體思路:1.獲取當前的操作系統 2.找到當前系統下CMD命令的位置 3.用exec()方法執行指定的DOS命令 4.遍歷結果的每一行,獲取自己需要的信息。下面是詳細的代碼:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class GetMAC {
//聲明一個空的構造方法
public GetMAC(){}
//獲取計算機MAC地址的方法
public String getMAC(){
String macAddress=null;
//獲取操作系統的名稱
String osName=System.getProperty("os.name");
System.out.println("操作系統為:"+osName);
//聲明獲取cmd路徑的對象并實例化
StringBuffer systemPathBuff=new StringBuffer("");
if(osName.indexOf("Windows")>-1){
//Windows操作系統的cmd.exe的絕對路徑
//append方法:將指定的字符串追加到此字符序列
systemPathBuff.append("c:\WINDOWS\system32\cmd.exe");
//System.out.println("cmd.exe的決定路徑:"+systemPathBuff.toString());
} if(osName.indexOf("NT")>-1){
//NT操作系統的cmd.exe的絕對路徑
systemPathBuff.append("c:\WINDOWS\command.com");
} //Process 類提供了執行從進程輸入、執行輸出到進程、
//等待進程完成、檢查進程的退出狀態以及銷毀(殺掉)進程的方法
Process pro=null;
try{ //功能:相當于在cmd下面執行dir命令,并得到命令執行完畢后的輸出流
pro=Runtime.getRuntime().exec(systemPathBuff.toString()+" /c dir ");
InputStream getMsg=pro.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(getMsg));
//讀取第一行
String message=br.readLine();
// String serNuResult=null;
int index=-1;
//讀取下一行
message=br.readLine();
//功能:相當于在cmd下執行ipconfig/all命令,并得到命令執行完畢后的輸出流
pro=Runtime.getRuntime().exec(systemPathBuff.toString()+" /c ipconfig/all");//必須在/c的前面
//加空格
getMsg=pro.getInputStream();
br=new BufferedReader(new InputStreamReader(getMsg));
//讀取第一行
message=br.readLine();
while(message!=null){
if((index=message.indexOf("Physical Address"))>0){
macAddress=message.substring(index+36).trim();
break;
} //讀取下一行
message=br.readLine();
} }catch(IOException e){
e.printStackTrace();
} return macAddress;
} public static void main(String[] args){
GetMAC macAdd=new GetMAC();
String macAddress=macAdd.getMAC();
System.out.println("這臺主機的MAC地址為:"+macAddress);
} }