zoukankan      html  css  js  c++  java
  • 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 }

    运行截图如下:

  • 相关阅读:
    sublime text 4 vim 插件配置
    ssh-keygen 的使用
    distribution transaction solution
    bilibili 大数据 视频下载 you-get
    Deepin 20.2.1 安装 MS SQL 2019 容器版本
    【转】使用Linux下Docker部署MSSQL并加载主机目录下的数据库
    【转】You Can Now Use OneDrive in Linux Natively Thanks to Insync
    dotnet 诊断工具安装命令
    Linux 使用 xrandr 设置屏幕分辨率
    【转】CentOS 7.9 2009 ISO 官方原版镜像下载
  • 原文地址:https://www.cnblogs.com/lwl80/p/13373950.html
Copyright © 2011-2022 走看看