关于Java获取系统信息

简介:

 一 .获取系统相关参数

  java 通过System.getProperties()获取系统参数

  Properties props=System.getProperties(); //系统属性

复制代码
 1 public class SystemInfo {
 2     public static void main(String[] args) {
 3         Properties sysProperty=System.getProperties(); //系统属性
 4         Set<Object> keySet = sysProperty.keySet();
 5         for (Object object : keySet) {
 6             String property = sysProperty.getProperty(object.toString());
 7             System.out.println(object.toString()+" : "+property);
 8         }
 9     }
10 }
复制代码

汉语英语一一对应

复制代码
 1 public class SystemInfo {
 2     public static void main(String[] args) {
 3        System.out.println("Java的运行环境版本:"+sysProperty.getProperty("java.version"));
 4        System.out.println("Java的运行环境供应商:"+sysProperty.getProperty("java.vendor"));
 5        System.out.println("Java供应商的URL:"+sysProperty.getProperty("java.vendor.url"));
 6        System.out.println("Java的安装路径:"+sysProperty.getProperty("java.home"));
 7        System.out.println("Java的虚拟机规范版本:"+sysProperty.getProperty("java.vm.specification.version"));
 8        System.out.println("Java的虚拟机规范供应商:"+sysProperty.getProperty("java.vm.specification.vendor"));
 9        System.out.println("Java的虚拟机规范名称:"+sysProperty.getProperty("java.vm.specification.name"));
10        System.out.println("Java的虚拟机实现版本:"+sysProperty.getProperty("java.vm.version"));
11        System.out.println("Java的虚拟机实现供应商:"+sysProperty.getProperty("java.vm.vendor"));
12        System.out.println("Java的虚拟机实现名称:"+sysProperty.getProperty("java.vm.name"));
13        System.out.println("Java运行时环境规范版本:"+sysProperty.getProperty("java.specification.version"));
14        System.out.println("Java运行时环境规范供应商:"+sysProperty.getProperty("java.specification.vender"));
15        System.out.println("Java运行时环境规范名称:"+sysProperty.getProperty("java.specification.name"));
16        System.out.println("Java的类格式版本号:"+sysProperty.getProperty("java.class.version"));
17        System.out.println("Java的类路径:"+sysProperty.getProperty("java.class.path"));
18        System.out.println("加载库时搜索的路径列表:"+sysProperty.getProperty("java.library.path"));
19        System.out.println("默认的临时文件路径:"+sysProperty.getProperty("java.io.tmpdir"));
20        System.out.println("一个或多个扩展目录的路径:"+sysProperty.getProperty("java.ext.dirs"));
21        System.out.println("操作系统的名称:"+sysProperty.getProperty("os.name"));
22        System.out.println("操作系统的构架:"+sysProperty.getProperty("os.arch"));
23        System.out.println("操作系统的版本:"+sysProperty.getProperty("os.version"));
24        System.out.println("文件分隔符:"+sysProperty.getProperty("file.separator"));   //在 unix 系统中是"/"
25        System.out.println("路径分隔符:"+sysProperty.getProperty("path.separator"));   //在 unix 系统中是":"
26        System.out.println("行分隔符:"+sysProperty.getProperty("line.separator"));   //在 unix 系统中是"/n"
27        System.out.println("用户的账户名称:"+sysProperty.getProperty("user.name"));
28        System.out.println("用户的主目录:"+sysProperty.getProperty("user.home"));
29        System.out.println("用户的当前工作目录:"+sysProperty.getProperty("user.dir"));
30     }
31 }
复制代码

 二、获取系统环境变量

  Map<String, String> getenv = System.getenv();

        Map<String, String> getenv = System.getenv();
        System.out.println(getenv);

 输出:

复制代码
{USERPROFILE=C:\Users\kongxiaohan, 
ProgramData=C:\ProgramData, 
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC, 
windows_tracing_logfile=C:\BVTBin\Tests\installpackage\csilogfile.log, 
JAVA_HOME=C:\Program Files\Java\jdk1.7.0_65, 
MAVEN_HOME=D:\apache-maven-3.0.5, windows_tracing_flags=3, 
TEMP=C:\Users\KONGXI~1\AppData\Local\Temp, 
SystemDrive=C:, ProgramFiles=C:\Program Files, 
Path=C:/Program Files/Java/jdk1.7.0_65/bin/../jre/bin/client;
C:/Program Files/Java/jdk1.7.0_65/bin/../jre/bin;
C:/Program Files/Java/jdk1.7.0_65/bin/../jre/lib/i386;
C:\Program Files\NVIDIA Corporation\PhysX\Common;
C:\Program Files\Java\jdk1.7.0_65\bin;
C:\Windows\system32;C:\Windows;
C:\Windows\System32\Wbem;
C:\Windows\System32\WindowsPowerShell\v1.0\;
C:\Program Files\EmEditor;
D:\Program Files\MySQL\MySQL Server 5.5\bin;
D:\Program Files\Subversion\bin;
D:\Program Files\TortoiseSVN\bin;
D:\ITCAST\java\day72_NoSql系列之mongoDB数据库\mongodb-win32-i386-2.4.3\bin;
E:\insta;tclient_12_1;
D:\apache-maven-3.0.5\bin;
C:\Program Files\VanDyke Software\Clients\;
G:\eclipse;, HOMEDRIVE=C:, PROCESSOR_REVISION=2502, USERDOMAIN=PC-ACER, ALLUSERSPROFILE=C:\ProgramData, VBOX_INSTALL_PATH=C:\Program Files\Oracle\VirtualBox\, PROCESSOR_IDENTIFIER=x86 Family 6 Model 37 Stepping 2, GenuineIntel, SESSIONNAME=Console, TMP=C:\Users\KONGXI~1\AppData\Local\Temp, CommonProgramFiles=C:\Program Files\Common Files, =::=::\, LOGONSERVER=\\PC-ACER, PROCESSOR_ARCHITECTURE=x86, FP_NO_HOST_CHECK=NO, OS=Windows_NT, HOMEPATH=\Users\kongxiaohan, PROCESSOR_LEVEL=6, APR_ICONV_PATH=D:\Program Files\Subversion\iconv, LOCALAPPDATA=C:\Users\kongxiaohan\AppData\Local, COMPUTERNAME=PC-ACER, windir=C:\Windows, SystemRoot=C:\Windows, NUMBER_OF_PROCESSORS=4, USERNAME=kongxiaohan, PUBLIC=C:\Users\Public, PSModulePath=C:\Windows\system32\WindowsPowerShell\v1.0\Modules\, NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK, LANG=zh_CN, ComSpec=C:\Windows\system32\cmd.exe, APPDATA=C:\Users\kongxiaohan\AppData\Roaming}
复制代码

三、获取IP、 计算机名、MAC、 硬盘卷序号

SystemInfo.java

复制代码
  1 import java.io.BufferedReader;
  2 import java.io.IOException;
  3 import java.io.InputStreamReader;
  4 import java.net.InetAddress;
  5 import java.net.NetworkInterface;
  6 import java.net.SocketException;
  7 import java.net.UnknownHostException;
  8 import java.util.Properties;
  9 
 10 /**
 11  * 获取当前系统信息
 12  */
 13 public class SystemInfo {
 14     // 当前实例
 15     private static SystemInfo currentSystem = null;
 16     private InetAddress localHost = null;
 17 
 18     private SystemInfo() {
 19         try {
 20             localHost = InetAddress.getLocalHost();
 21         } catch (UnknownHostException e) {
 22             // TODO Auto-generated catch block
 23             e.printStackTrace();
 24         }
 25     }
 26 
 27     /**
 28      * 单例模式获取对象
 29      * 
 30      * @return
 31      */
 32     public static SystemInfo getInstance() {
 33         if (currentSystem == null)
 34             currentSystem = new SystemInfo();
 35         return currentSystem;
 36     }
 37 
 38     /**
 39      * 本地IP
 40      * 
 41      * @return IP地址
 42      */
 43     public String getIP() {
 44         String ip = localHost.getHostAddress();
 45         return ip;
 46     }
 47 
 48     /**
 49      * 获取用户机器名称
 50      * 
 51      * @return
 52      */
 53     public String getHostName() {
 54         return localHost.getHostName();
 55     }
 56 
 57     /**
 58      * 获取C盘卷 序列号
 59      * 
 60      * @return
 61      */
 62     public String getDiskNumber() {
 63         String line = "";
 64         String HdSerial = "";// 记录硬盘序列号
 65 
 66         try {
 67 
 68             Process proces = Runtime.getRuntime().exec("cmd /c dir c:");// 获取命令行参数
 69             BufferedReader buffreader = new BufferedReader(
 70                     new InputStreamReader(proces.getInputStream()));
 71 
 72             while ((line = buffreader.readLine()) != null) {
 73 
 74                 if (line.indexOf("卷的序列号是 ") != -1) { // 读取参数并获取硬盘序列号
 75 
 76                     HdSerial = line.substring(line.indexOf("卷的序列号是 ")
 77                             + "卷的序列号是 ".length(), line.length());
 78                     break;
 79                 }
 80             }
 81 
 82         } catch (IOException e) {
 83             // TODO Auto-generated catch block
 84             e.printStackTrace();
 85         }
 86 
 87         return HdSerial;
 88     }
 89 
 90     /**
 91      * 获取Mac地址
 92      * 
 93      * @return Mac地址,例如:F0-4D-A2-39-24-A6
 94      */
 95     public String getMac() {
 96         NetworkInterface byInetAddress;
 97         try {
 98             byInetAddress = NetworkInterface.getByInetAddress(localHost);
 99             byte[] hardwareAddress = byInetAddress.getHardwareAddress();
100             return getMacFromBytes(hardwareAddress);
101         } catch (SocketException e) {
102             // TODO Auto-generated catch block
103             e.printStackTrace();
104         }
105         return null;
106     }
107 
108     /**
109      * 获取当前系统名称
110      * 
111      * @return 当前系统名,例如: windows xp
112      */
113     public String getSystemName() {
114         Properties sysProperty = System.getProperties();
115         // 系统名称
116         String systemName = sysProperty.getProperty("os.name");
117         return systemName;
118     }
119 
120     private String getMacFromBytes(byte[] bytes) {
121         StringBuffer mac = new StringBuffer();
122         byte currentByte;
123         boolean first = false;
124         for (byte b : bytes) {
125             if (first) {
126                 mac.append("-");
127             }
128             currentByte = (byte) ((b & 240) >> 4);
129             mac.append(Integer.toHexString(currentByte));
130             currentByte = (byte) (b & 15);
131             mac.append(Integer.toHexString(currentByte));
132             first = true;
133         }
134         return mac.toString().toUpperCase();
135     }
136 }
复制代码

SystemInfoTest.java

复制代码
 1 public class SystemInfoTest {
 2     public static void main(String[] args) {
 3         SystemInfo syso = SystemInfo.getInstance();
 4         System.out.println("IP地址:"+syso.getIP());
 5         System.out.println("主机名称:"+syso.getHostName());
 6         System.out.println("获取C盘卷 序列号"+syso.getDiskNumber());
 7         System.out.println("Mac地址"+syso.getMac());
 8         System.out.println("获取当前系统名称"+syso. getSystemName());
 9     }
10 }
复制代码

 输出结果:

复制代码
IP地址:169.254.247.195
主机名称:pc-acer
获取C盘卷 序列号A0E7-407C
Mac地址08-00-27-00-90-35
获取当前系统名称Windows 7
复制代码

//============================================================================================

 


本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/4289860.html,如需转载请自行联系原作者

相关文章
|
2月前
|
存储 监控 Java
【Java并发】【线程池】带你从0-1入门线程池
欢迎来到我的技术博客!我是一名热爱编程的开发者,梦想是编写高端CRUD应用。2025年我正在沉淀中,博客更新速度加快,期待与你一起成长。 线程池是一种复用线程资源的机制,通过预先创建一定数量的线程并管理其生命周期,避免频繁创建/销毁线程带来的性能开销。它解决了线程创建成本高、资源耗尽风险、响应速度慢和任务执行缺乏管理等问题。
207 60
【Java并发】【线程池】带你从0-1入门线程池
|
18天前
|
Java 中间件 调度
【源码】【Java并发】从InheritableThreadLocal和TTL源码的角度来看父子线程传递
本文涉及InheritableThreadLocal和TTL,从源码的角度,分别分析它们是怎么实现父子线程传递的。建议先了解ThreadLocal。
54 4
【源码】【Java并发】从InheritableThreadLocal和TTL源码的角度来看父子线程传递
|
1月前
|
存储 网络协议 安全
Java网络编程,多线程,IO流综合小项目一一ChatBoxes
**项目介绍**:本项目实现了一个基于TCP协议的C/S架构控制台聊天室,支持局域网内多客户端同时聊天。用户需注册并登录,用户名唯一,密码格式为字母开头加纯数字。登录后可实时聊天,服务端负责验证用户信息并转发消息。 **项目亮点**: - **C/S架构**:客户端与服务端通过TCP连接通信。 - **多线程**:采用多线程处理多个客户端的并发请求,确保实时交互。 - **IO流**:使用BufferedReader和BufferedWriter进行数据传输,确保高效稳定的通信。 - **线程安全**:通过同步代码块和锁机制保证共享数据的安全性。
98 23
|
24天前
|
数据采集 存储 网络协议
Java HttpClient 多线程爬虫优化方案
Java HttpClient 多线程爬虫优化方案
|
1月前
|
Java 调度
【源码】【Java并发】【线程池】邀请您从0-1阅读ThreadPoolExecutor源码
当我们创建一个`ThreadPoolExecutor`的时候,你是否会好奇🤔,它到底发生了什么?比如:我传的拒绝策略、线程工厂是啥时候被使用的? 核心线程数是个啥?最大线程数和它又有什么关系?线程池,它是怎么调度,我们传入的线程?...不要着急,小手手点上关注、点赞、收藏。主播马上从源码的角度带你们探索神秘线程池的世界...
156 0
【源码】【Java并发】【线程池】邀请您从0-1阅读ThreadPoolExecutor源码
|
2月前
|
Java 程序员 开发者
Java社招面试题:一个线程运行时发生异常会怎样?
大家好,我是小米。今天分享一个经典的 Java 面试题:线程运行时发生异常,程序会怎样处理?此问题考察 Java 线程和异常处理机制的理解。线程发生异常,默认会导致线程终止,但可以通过 try-catch 捕获并处理,避免影响其他线程。未捕获的异常可通过 Thread.UncaughtExceptionHandler 处理。线程池中的异常会被自动处理,不影响任务执行。希望这篇文章能帮助你深入理解 Java 线程异常处理机制,为面试做好准备。如果你觉得有帮助,欢迎收藏、转发!
185 14
|
2月前
|
安全 Java 程序员
Java 面试必问!线程构造方法和静态块的执行线程到底是谁?
大家好,我是小米。今天聊聊Java多线程面试题:线程类的构造方法和静态块是由哪个线程调用的?构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节有助于掌握Java多线程机制。下期再见! 简介: 本文通过一个常见的Java多线程面试题,详细讲解了线程类的构造方法和静态块是由哪个线程调用的。构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节对掌握Java多线程编程至关重要。
80 13
|
2月前
|
安全 Java 开发者
【JAVA】封装多线程原理
Java 中的多线程封装旨在简化使用、提高安全性和增强可维护性。通过抽象和隐藏底层细节,提供简洁接口。常见封装方式包括基于 Runnable 和 Callable 接口的任务封装,以及线程池的封装。Runnable 适用于无返回值任务,Callable 支持有返回值任务。线程池(如 ExecutorService)则用于管理和复用线程,减少性能开销。示例代码展示了如何实现这些封装,使多线程编程更加高效和安全。
|
3月前
|
监控 Java
java异步判断线程池所有任务是否执行完
通过上述步骤,您可以在Java中实现异步判断线程池所有任务是否执行完毕。这种方法使用了 `CompletionService`来监控任务的完成情况,并通过一个独立线程异步检查所有任务的执行状态。这种设计不仅简洁高效,还能确保在大量任务处理时程序的稳定性和可维护性。希望本文能为您的开发工作提供实用的指导和帮助。
165 17
|
4月前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
114 1
Java—多线程实现生产消费者
下一篇
oss创建bucket