构造一个ping的命令类
这个类中可以设置需要ping的目标域名
类提供方法public void exec();
方法执行完毕后可以读取ping的次数,ping的成功回应包个数
ping的丢包个数,ping的丢包率
最大的ping值,最小ping值,平均ping值
ExecPing ep=new ExecPing("www.baidu.com","-n","100");
ep.exec();
ep.getLostPer();
ep.getLostNum();
eo.getMaxPingVal();
eo.getMinPingVal();
主方法中可以输入:www.baidu.com ,也可以输入:www.baidu.com","-n","100",所以在功能类中定义了一个一参构造和多参构造,如果是一参则设置默认发送4次,如果是多参则将参数转为整形赋给sentNum变量,执行过程主要使用Runtime,将执行结果赋给process,并使用语句new BufferedReader(new InputStreamReader(p.getInputStream()));创建一个对象后使用循环依次取出。之后通过字符串的indexOf、subString,方法后使用spilt对字符串进行分割,之后存入数组,取数组第一个元素即可。其余功能类似。
1 package day14_1; 2 3 import java.io.BufferedReader; 4 import java.io.InputStreamReader; 5 6 public class ExecPing { 7 8 private int sentNum; 9 private int receiveNum; 10 private int lostPer; 11 private int lostNum; 12 private int maxPingVal; 13 private int minPingVal; 14 private String cmdStr; 15 16 public ExecPing() { 17 } 18 19 /** 20 * 一参构造 输入:ping www.baidu.com 21 * 22 * @param cmdStr 23 */ 24 public ExecPing(String cmdStr) { 25 // this.cmdStr = cmdStr; 26 this.cmdStr = "ping " + cmdStr; 27 this.sentNum = 4; 28 } 29 30 /** 31 * 多参构造 输入:ping -n 10 www.baidu.com 32 * 33 * @param cmdStr 34 * ping www.baidu.com 35 * @param paraOne 36 * -n 37 * @param paraTwo 38 * 10 39 */ 40 // www.baidu.com","-n","100" 41 public ExecPing(String cmdStr, String paraOne, String paraTwo) { 42 this.cmdStr = "ping " + paraOne + " " + paraTwo + " " + cmdStr; 43 this.sentNum = Integer.parseInt(paraTwo); 44 45 } 46 47 /** 48 * 执行方法 49 * 50 * @return 51 */ 52 public void exec() { 53 BufferedReader br = null; 54 StringBuilder sb = new StringBuilder(); 55 try { 56 Process p = Runtime.getRuntime().exec(cmdStr); 57 br = new BufferedReader(new InputStreamReader(p.getInputStream())); 58 String line = null; 59 // StringBuilder sb = new StringBuilder(); 60 while ((line = br.readLine()) != null) { 61 sb.append(line + " "); 62 } 63 64 } catch (Exception e) { 65 e.printStackTrace(); 66 } finally { 67 if (br != null) { 68 try { 69 br.close(); 70 } catch (Exception e) { 71 e.printStackTrace(); 72 } 73 } 74 } 75 76 String str = sb.toString(); 77 System.out.println(str); 78 79 int indexLostNum = str.indexOf("丢失 = "); 80 String strLostNum = str.substring(indexLostNum + 5); // 找到位置 81 String[] strLostNumArr = strLostNum.split(" ");// 拆分截取的字符串,取第一个内容 82 setLostNum(Integer.parseInt(strLostNumArr[0])); 83 // System.out.println("丢失了:" + Integer.parseInt(strLostNumArr[0]) + 84 // "个"); 85 86 int indexLostPerNum = str.indexOf("丢失 = 0 ("); 87 String strLostPerNum = str.substring(indexLostPerNum + 8); // 找到位置 88 String[] strLostPerNumArr = strLostPerNum.split("%");// 拆分截取的字符串,取第一个内容 89 setLostPer(Integer.parseInt(strLostPerNumArr[0])); 90 91 int indexMaxPingVal = str.indexOf("最长 = "); 92 String strMaxPingVal = str.substring(indexMaxPingVal + 5); // 找到位置 93 String[] strMaxPingValArr = strMaxPingVal.split("m");// 拆分截取的字符串,取第一个内容 94 setMaxPingVal(Integer.parseInt(strMaxPingValArr[0])); 95 96 int indexMinPingVal = str.indexOf("最短 = "); 97 String strMinPingVal = str.substring(indexMinPingVal + 5); // 找到位置 98 String[] strMinPingValArr = strMinPingVal.split("m");// 拆分截取的字符串,取第一个内容 99 setMinPingVal(Integer.parseInt(strMinPingValArr[0])); 100 101 } 102 103 public void getSentNum() { 104 System.out.println("ping了:" + sentNum + "次"); 105 } 106 107 public void getLostPer() { 108 System.out.println("丢失率:" + lostPer + "%"); 109 } 110 111 public void setLostPer(int lostPer) { 112 this.lostPer = lostPer; 113 } 114 115 public void getLostNum() { 116 System.out.println("丢失了:" + lostNum + "个"); 117 } 118 119 public void setLostNum(int lostNum) { 120 this.lostNum = lostNum; 121 } 122 123 public void getMaxPingVal() { 124 System.out.println("最长:" + maxPingVal + "毫秒"); 125 } 126 127 public void setMaxPingVal(int maxPingVal) { 128 this.maxPingVal = maxPingVal; 129 } 130 131 public void getMinPingVal() { 132 System.out.println("最短:" + minPingVal + "毫秒"); 133 } 134 135 public void setMinPingVal(int minPingVal) { 136 this.minPingVal = minPingVal; 137 } 138 139 }
1 package day14_1; 2 3 public class TestExecPing { 4 public static void main(String[] args) { 5 ExecPing ep = new ExecPing("www.baidu.com","-n","2"); 6 ep.exec(); 7 System.out.println("======================================"); 8 ep.getLostNum(); 9 ep.getLostPer(); 10 ep.getMaxPingVal(); 11 ep.getMinPingVal(); 12 ep.getSentNum(); 13 } 14 15 }
运行截图如下: