这个例子使用了J2SE5.0的ProcessBuilder类执行外部的程序,相对于 Runtime.exec ,它更方便,可以设置环境变量等。 7 g4 V. w! I2 T: P( _- R
) A+ {7 C$ Q& z, B l8 o: F0 `8 t/ |
package com.kuaff.jdk5package;
, R! |; R! A) M' B S& F' l' O3 h9 H6 P: V9 B+ Q
import java.io.IOException; ! _. ?: r" z" c! h
import java.io.InputStream;
* d; o% J3 q5 d0 zimport java.util.ArrayList; 9 k- U2 K8 `, _9 E8 I& u% d
import java.util.List;
; \% E" t' R' n$ V6 z+ c2 o
: A$ J/ o# n0 a: h9 p5 \$ _public class ProcessBuilderShow
9 s) p# {& Q6 y{
. ~& m# n% V* A public static List getPhysicalAddress() v, M4 H- d# j* Q
{ 6 f; f1 ^, p) Z( {. K z
Process p = null; 6 e- [( T% D7 N! g2 R M
//物理网卡列表 7 s4 f/ V6 {4 P
List address = new ArrayList(); 1 R5 t8 Y5 @0 }8 Q
& i- D6 Q, N1 n/ X' z, Q
try . n/ t; d6 y! H' ?, i
{
) {8 _" ^- d4 K/ A1 t2 o! j //执行ipconfig /all命令 1 l0 a" l' u5 H- n. P$ o1 u& D- t
p = new ProcessBuilder("ipconfig", "/all").start(); $ Y8 o% c! X V- m t: t1 i6 D
}
, n" J2 e# K; m catch (IOException e)
p$ e( [0 U7 _& P& V5 } { 1 n+ B& {9 |- y( L( W. W
return address; - G5 B: v& f0 ~$ R$ g a
} + z5 ^$ Z, |% u( ~2 o
byte[] b = new byte[1024]; # t5 v# T5 j+ k8 @2 c7 K
StringBuffer sb = new StringBuffer();
) Y0 U4 X2 o5 s$ G! e //读取进程输出值 ; a# D& P4 ~- ~9 O5 N0 F
InputStream in = p.getInputStream(); D. I A: ^# m9 u: h! X& E
try
0 E" D( D: [2 B" ^; ` { % c0 |1 C4 r ]' }9 D0 f
while (in.read(b)>0)
: t* t8 ^ j9 [ { 1 r$ e9 v3 V8 C6 D6 g& S& k
sb.append(new String(b));
7 l1 Q# a4 B* [% D }
0 V5 o% @+ `# _2 | }
) D' G r; I/ K+ S3 ~) ] catch (IOException e1)
5 n9 k6 @6 M8 X- a9 L0 c { 2 ]# g& U% W6 T" e9 n+ p
} $ z- r- I, Q2 c2 E* }7 x
finally * @; P4 l: v: u4 m, O |; V
{
8 ]4 v# o' _2 C2 ? try % p5 X( E$ B5 E6 ^+ v
{ ( R! F) e$ \6 Q/ l
in.close();
) |7 B+ t7 A( N* Z5 i }
; C; C, N6 j0 g, u/ ^- s6 C. J4 h catch (IOException e2)
0 H) ^; [0 q: J: K {
4 ^- D* N# D3 u" b, V1 l, f }
* Q" r5 g* i7 i/ @ }
$ |/ T S% [; E2 e, b% F9 }: ` //以下分析输出值,得到物理网卡 . W6 E" [# {1 e+ l+ }
String rtValue = sb.substring(0); 2 r) v, ^- Q( R# I/ ?+ Q
int i = rtValue.indexOf("Physical Address. . . . . . . . . :"); ! R( r0 v" l! @+ B
while(i>0)
/ W$ B- s/ e5 j: o, f8 t H {
" ~; S& F# A( |- `3 y rtValue = rtValue.substring(i + "Physical Address. . . . . . . . . :".length());
0 C. P6 `2 L c# |4 v address.add(rtValue.substring(0,18)); T! t, B7 e" o7 |9 s |- h
i = rtValue.indexOf("Physical Address. . . . . . . . . :"); |