Java实现获取命令行中的指定数据

构造一个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 + "\n");
 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 }

运行截图如下:

 

posted @ 2020-07-24 19:04  勤快的懒羊羊  阅读(436)  评论(0编辑  收藏  举报