是否可以使用 Java 收集有关计算机硬件的信息?
如果是这样,那又如何呢?我正在为学校做一个团队项目。我认为Java实际上无法直接访问硬件,因为这将使其很难跨平台。我需要知道这一点,因为经过一些快速谷歌搜索后,我还没有找到任何东西,而我的团队成员(他们想要这样做并且想要使用 Java)似乎不确定如何继续 - 经过显然比我更多的搜索之后已经完成了。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您的权利是您无法直接从 Java 访问硬件(除非您调用本机代码,但这不是您想要的),因为它运行在沙盒环境中,即 Java 虚拟机 (JVM)。
不过,您可以从 JVM 获取一些从底层操作系统收集的基本信息。
查看使用 Java 获取操作系统级系统信息
Your right in that you can't access hardware directly from Java (unless your calling on native code, but that's not what your after) since it runs in a sandboxed environment, namely the Java Virtual Machine (JVM).
However you can get some basic info from the JVM that it gathers from the underlying OS.
Take a look at using Java to get OS-level system information
您正在寻找的是SIGAR API
概述
Sigar API为收集系统提供了一个便携式接口信息例如:
平均、正常运行时间、登录
信息、状态、参数、环境、
打开文件
配置信息和指标
网络路由表
大多数操作系统都提供此信息,但每个操作系统都有自己的提供方式。
SIGAR 为开发人员提供了一个 API 来访问这些信息,无论底层平台如何。
核心 API 是用纯 C 实现的,目前绑定了 Java、Perl、Ruby、Python、Erlang、PHP 和 C# 实现。
What you are looking for is SIGAR API
Overview
The Sigar API provides a portable interface for gathering system information such as:
average, uptime, logins
info, state, arguments, environment,
open files
configuration info and metrics
Network route table
This information is available in most operating systems, but each OS has their own way(s) providing it.
SIGAR provides developers with one API to access this information regardless of the underlying platform.
The core API is implemented in pure C with bindings currently implemented for Java, Perl, Ruby, Python, Erlang, PHP and C#.
使用本机 Java API 可以获得的信息量非常小,因为您的程序通常只知道它所在的虚拟机。
但是,您可以 调用命令行,运行本机应用程序并解析结果。然而,这在 Java 应用程序中并不是特别好的形式,因为您失去了通常与该语言相关的跨平台优势。
The amount of info you'll be able to get using native Java API's is pretty small, as your program generally only knows about the VM it's sitting on.
You can, however, call out to the command line, run native apps, and parse the results. It's not particularly good form in a Java app, however, as you lose the cross-platform benefits usually associated with the language.
您可以使用 System.getEnv()。
您还可以使用 Runtime.getRuntime() - 有关详细信息,请参阅 R. Kettelerij 的回复。
另一种选择是使用 JMX。 MemoryMXBean例如提供一些有关 RAM 使用情况(堆和非堆)的信息。
You can get some basic information regarding the Processor/s using System.getEnv().
You can also use Runtime.getRuntime() - See the response of R. Kettelerij for details.
Another option is to use JMX. The MemoryMXBean for example provides some information regarding the RAM usage (heap and non-heap).
对于任何正在寻找截至 2023 年仍在维护的库的人,请查看 OSHI
To anyone looking for a library that is still being maintained as of 2023 check out OSHI