获取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);

  } }