您的位置:首页 > 编程语言 > Java开发

java调用系统命令

2009-10-05 21:27 411 查看
由于java 是跨平台的,有时候我们需要用到操作系统的一些信息,为了方便期间,干脆就直接调用操作系统的命令来实现,比如查看IP地址,MAC地址等。不过两个在jdk6里面已经有了,不过以前都是用调用dos命令,然后获取输出的办法来做的,比如:

Java代码



import java.io.*;

public class DT {

public static void main(String[] args) throws IOException

{

String command="ipconfig";<BR> Runtime r=Runtime.getRuntime();

Process p=r.exec(command);

BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));

StringBuffer sb=new StringBuffer();

String inline;

while(null!=(inline=br.readLine())){

sb.append(inline).append("/n");

}

System.out.println(sb.toString());

}

}

import java.io.*;
public class DT {
public static void main(String[] args) throws IOException
{
String command="ipconfig";
Runtime r=Runtime.getRuntime();
Process p=r.exec(command);
BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));
StringBuffer sb=new StringBuffer();
String inline;
while(null!=(inline=br.readLine())){
sb.append(inline).append("/n");
}
System.out.println(sb.toString());
}
}

这样的话可以得到如下的结果:

结果代码



Windows IP Configuration

Ethernet adapter VMware Network Adapter VMnet8:

Connection-specific DNS Suffix . :

IP Address. . . . . . . . . . . . : 192.168.79.1

Subnet Mask . . . . . . . . . . . : 255.255.255.0

Default Gateway . . . . . . . . . :

Ethernet adapter VMware Network Adapter VMnet1:

Connection-specific DNS Suffix . :

IP Address. . . . . . . . . . . . : 192.168.23.1

Subnet Mask . . . . . . . . . . . : 255.255.255.0

Default Gateway . . . . . . . . . :

Ethernet adapter 本地连接:

Connection-specific DNS Suffix . :

IP Address. . . . . . . . . . . . : 192.168.100.12

Subnet Mask . . . . . . . . . . . : 255.255.255.0

Default Gateway . . . . . . . . . : 192.168.100.250

Windows IP Configuration
Ethernet adapter VMware Network Adapter VMnet8:

Connection-specific DNS Suffix  . :

IP Address. . . . . . . . . . . . : 192.168.79.1

Subnet Mask . . . . . . . . . . . : 255.255.255.0

Default Gateway . . . . . . . . . :

Ethernet adapter VMware Network Adapter VMnet1:

Connection-specific DNS Suffix  . :

IP Address. . . . . . . . . . . . : 192.168.23.1

Subnet Mask . . . . . . . . . . . : 255.255.255.0

Default Gateway . . . . . . . . . :

Ethernet adapter 本地连接:

Connection-specific DNS Suffix  . :

IP Address. . . . . . . . . . . . : 192.168.100.12

Subnet Mask . . . . . . . . . . . : 255.255.255.0

Default Gateway . . . . . . . . . : 192.168.100.250

然而,当我在执行wmic 命令的时候,想要获取它的输出确不行了,看代码:

Java代码



package test;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

public class ManagerArgs {

public static void main(String[] args) {

try {

Process p = Runtime.getRuntime().exec("cmd.exe /c wmic process get name,executablepath");

BufferedReader br = new BufferedReader(new InputStreamReader(p

.getInputStream()));

String line = "";

while ((line = br.readLine()) != null) {

System.out.println(line);

}

br.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

package test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ManagerArgs {

public static void main(String[] args) {
try {

Process p = Runtime.getRuntime().exec("cmd.exe /c wmic process get name,executablepath");

BufferedReader br = new BufferedReader(new InputStreamReader(p
.getInputStream()));
String line = "";
while ((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

程序在执行的时候就柱塞了,根本获取不到想ipconfig 那样的结果,把命令放到DOS 命令里面取执行,看图片:



这里确实可以的。难道wmic 命令的结果java 就取不到了吗?同样的都是dos 命令,为啥就有这样的区别呢?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: