Есть 2 проблемы, которые я вижу.
Сначала вы переназначаете значение macaddress
.Это означает, что всегда будет только последний байт из mac
.Вторая проблема заключается в том, что вы выполняете итерацию по всем интерфейсам, которые есть на вашей машине, поэтому даже если вы изменили
macaddress = String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : "");
macaddress += String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : "");
для добавления, а не назначения, вы получите строку со всеми MAC-адресами вашей машины.,Также вам придется инициализировать macaddress
пустой строкой (поскольку вы не можете добавить к null
).
Поскольку вы выполняете итерации по всем интерфейсам, как насчет возврата Collection
вместо одногоString
?Также может быть уместнее использовать StringBuilder
.
public List<String> getMacAddress() { // Change return type from String to List<String>
Enumeration<NetworkInterface> networks = null;
try {
networks = NetworkInterface.getNetworkInterfaces();
} catch (SocketException e) {
e.printStackTrace();
}
NetworkInterface inter;
List<String> addresses = new ArrayList<>(); // Create list to store all MAC addresses
while (networks.hasMoreElements()) {
inter = networks.nextElement();
byte[] mac = null;
try {
mac = inter.getHardwareAddress();
} catch (SocketException e) {
e.printStackTrace();
}
if (mac != null) {
StringBuilder sb = new StringBuilder(); // Rather than appending with += use a String builder
for (int i = 0; i < mac.length; i++) {
sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : "")); // Use append on the string builder
}
addresses.add(sb.toString()); // Add MAC address to the Collection
}
}
return addresses; // Return collection rather than one String
}