这类问题常常会被人问题, 如何用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, 采用本地代码实现。