• 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 + "
    ");
     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 }

    运行截图如下:

  • 相关阅读:
    java学习笔记(12) —— Struts2 通过 xml /json 实现简单的业务处理
    java学习笔记(11) —— Struts2与Spring的整合
    java学习笔记(10) —— ActionContext、ServletActionContext、ServletRequestAware用法
    PLY调试笔记
    头条暑期训练营往期题目及个人答案
    OpenStack创建网络和虚拟机、dhcp设备、虚拟路由器、虚拟机访问外网原理分析
    训练模型千万条,节省运存第一条
    编译器
    贝叶斯调参原理总结
    CNN原理+超参数优化
  • 原文地址:https://www.cnblogs.com/lwl80/p/13373950.html
Copyright © 2020-2023  润新知