Java访问操作系统资源

来源:互联网 发布:日本人学汉语 知乎 编辑:程序博客网 时间:2024/06/05 18:24

 

这类问题常常会被人问题, 如何用Java实现下面的功能?

 

1. 需要做一个应用模块, 用来监控CPU的占有率.

 

2. 想获得磁盘空间的大小.

 

3. 当前系统连接请求

 

4. 系统进程状态

 

5. 写一个Java程序, 后台运行, 产生类似金山词霸的鼠标抓取单词功能

 

...

 

上述问题的共同点是: 涉及到底层资源, 如CPU, 磁盘空间, 请求状态, 进程状态, 对于底层资源而言, 根据操作系统不同, 会存在不同的描述, 而Java作为一个跨平台的语言, 不会提供直接面对这些底层资源的操作(当然它可以实现, 如文件访问), 为了更好的跨平台, Java并没有为这些资源的访问, 提供API.

 

那么如何获得底层资源[1~4]所描述的问题, 获取其它进程的状态[第五个问题]呢?

 

对Java而言, 可以通过两种方式实现:

 

1. JNI, 可以解决问题5, 实质是通过Java启动一个后台服务, 这个服务能获取当前的鼠标靠近的单词. 本质实质就是一个平台相关的C程序.

2. 调用命令行接口, 从标准输入输出流中得到返回结果, 然后对这个数据流进行分析即可, 具体做法如下:



然后便可以得到需要的内容了, 比如系统的资源可以用systeminfo命令获取.分析文本可以采用正则表达式, 也容易搞定这个问题。

 

Java对跨进程的处理, 往往非常弱小, 进程之间的交互能力不强。 弱小的原因就是跨平台带来的牺牲, 如果跨平台需要解决操作系统的底层问题, 用Java的优势会明显减弱。 如果带来更大的问题, 建议放弃Java, 采用本地代码实现。