1.判断操作系统是Windows还是Linux
1 private static Boolean isLinux() {
2 String os = System.getProperty("os.name");
3 log.info("os.name: {}", os);
4 return !os.toLowerCase().startsWith("win");
5 }
2. Linux:
获取MAC地址:
1 private static String getMACAddressByLinux() throws Exception {
2 String[] cmd = {"ifconfig"};
3
4 Process process = Runtime.getRuntime().exec(cmd);
5 process.waitFor();
6
7 BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
8 StringBuffer sb = new StringBuffer();
9 String line;
10 while ((line = br.readLine()) != null) {
11 sb.append(line);
12 }
13
14 String str1 = sb.toString();
15 String str2 = str1.split("ether")[1].trim();
16 String result = str2.split("txqueuelen")[0].trim();
17 log.info("Linux MacAddress is: {}", result);
18 br.close();
19
20 return result;
21 }
获取硬盘序列号:
1 private static String getIdentifierByLinux() throws Exception {
2 String[] cmd = {"fdisk", "-l"};
3
4 Process process = Runtime.getRuntime().exec(cmd);
5 process.waitFor();
6
7 BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
8 StringBuffer sb = new StringBuffer();
9 String line;
10 while ((line = br.readLine()) != null) {
11 sb.append(line);
12 }
13
14 String str1 = sb.toString();
15 String str2 = str1.split("identifier:")[1].trim();
16 String result = str2.split("Device Boot")[0].trim();
17 log.info("Linux Identifier is: {}", result);
18 br.close();
19
20 return result;
21 }
3. Windows:
获取MAC地址: (默认获取第一张网卡)
1 private static String getMACAddressByWindows() throws Exception {
2 String result = "";
3 Process process = Runtime.getRuntime().exec("ipconfig /all");
4 BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream(), "GBK"));
5
6 String line;
7 int index = -1;
8 while ((line = br.readLine()) != null) {
9 index = line.toLowerCase().indexOf("物理地址");
10 if (index >= 0) {// 找到了
11 index = line.indexOf(":");
12 if (index >= 0) {
13 result = line.substring(index + 1).trim();
14 }
15 break;
16 }
17 }
18 log.info("Windows MACAddress is: {}", result);
19 br.close();
20 return result;
21 }
获取硬盘序列号: (默认获取C盘)
1 private static String getIdentifierByWindows() throws Exception {
2 String result = "";
3 Process process = Runtime.getRuntime().exec("cmd /c dir C:");
4 BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream(), "GBK"));
5
6 String line;
7 while ((line = br.readLine()) != null) {
8 if (line.indexOf("卷的序列号是 ") != -1) {
9 result = line.substring(line.indexOf("卷的序列号是 ") + "卷的序列号是 ".length(), line.length());
10 break;
11 }
12 }
13 log.info("Windows Identifier is: {}", result);
14 br.close();
15 return result;
16 }
4. 测试:
1 public static void main(String[] a) throws Exception {
2 // 判断是Linux还是Windows
3 if (isLinux()) {
4 // Linux操作系统
5 String macAddress = getMACAddressByLinux();
6 System.out.println("Linux macAddress: " + macAddress);
7 String Identifier = getIdentifierByLinux();
8 System.out.println("Linux Identifier: " + Identifier);
9 } else {
10 // Windows操作系统
11 String macAddress = getMACAddressByWindows();
12 System.out.println("Windows macAddress: " + macAddress);
13 String Identifier = getIdentifierByWindows();
14 System.out.println("Windows Identifier: " + Identifier);
15 }
16 }
注意事项:
在Windows环境使用javac Test.java 命令编译该java文件时, 需指定编码, 应使用以下命令:
1 javac -encoding UTF-8 Test.java