Java访问操作系统资源

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

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

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

3. 当前系统连接请求

4. 系统进程状态

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

...

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

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

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

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

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

Process pro = Runtime.getRuntime().exec("cmd /c tasklist"); BufferedReader in = new BufferedReader(new InputStreamReader(pro.getInputStream()));

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值