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对字符串进行分割,之后存入数组,取数组第一个元素即可。其余功能类似。
package day14_1; import java.io.BufferedReader;
import java.io.InputStreamReader; public class ExecPing { private int sentNum;
private int receiveNum;
private int lostPer;
private int lostNum;
private int maxPingVal;
private int minPingVal;
private String cmdStr; public ExecPing() {
} /**
* 一参构造 输入:ping www.baidu.com
*
* @param cmdStr
*/
public ExecPing(String cmdStr) {
// this.cmdStr = cmdStr;
this.cmdStr = "ping " + cmdStr;
this.sentNum = 4;
} /**
* 多参构造 输入:ping -n 10 www.baidu.com
*
* @param cmdStr
* ping www.baidu.com
* @param paraOne
* -n
* @param paraTwo
* 10
*/
// www.baidu.com","-n","100"
public ExecPing(String cmdStr, String paraOne, String paraTwo) {
this.cmdStr = "ping " + paraOne + " " + paraTwo + " " + cmdStr;
this.sentNum = Integer.parseInt(paraTwo); } /**
* 执行方法
*
* @return
*/
public void exec() {
BufferedReader br = null;
StringBuilder sb = new StringBuilder();
try {
Process p = Runtime.getRuntime().exec(cmdStr);
br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
// StringBuilder sb = new StringBuilder();
while ((line = br.readLine()) != null) {
sb.append(line + "\n");
} } catch (Exception e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (Exception e) {
e.printStackTrace();
}
}
} String str = sb.toString();
System.out.println(str); int indexLostNum = str.indexOf("丢失 = ");
String strLostNum = str.substring(indexLostNum + 5); // 找到位置
String[] strLostNumArr = strLostNum.split(" ");// 拆分截取的字符串,取第一个内容
setLostNum(Integer.parseInt(strLostNumArr[0]));
// System.out.println("丢失了:" + Integer.parseInt(strLostNumArr[0]) +
// "个"); int indexLostPerNum = str.indexOf("丢失 = 0 (");
String strLostPerNum = str.substring(indexLostPerNum + 8); // 找到位置
String[] strLostPerNumArr = strLostPerNum.split("%");// 拆分截取的字符串,取第一个内容
setLostPer(Integer.parseInt(strLostPerNumArr[0])); int indexMaxPingVal = str.indexOf("最长 = ");
String strMaxPingVal = str.substring(indexMaxPingVal + 5); // 找到位置
String[] strMaxPingValArr = strMaxPingVal.split("m");// 拆分截取的字符串,取第一个内容
setMaxPingVal(Integer.parseInt(strMaxPingValArr[0])); int indexMinPingVal = str.indexOf("最短 = ");
String strMinPingVal = str.substring(indexMinPingVal + 5); // 找到位置
String[] strMinPingValArr = strMinPingVal.split("m");// 拆分截取的字符串,取第一个内容
setMinPingVal(Integer.parseInt(strMinPingValArr[0])); } public void getSentNum() {
System.out.println("ping了:" + sentNum + "次");
} public void getLostPer() {
System.out.println("丢失率:" + lostPer + "%");
} public void setLostPer(int lostPer) {
this.lostPer = lostPer;
} public void getLostNum() {
System.out.println("丢失了:" + lostNum + "个");
} public void setLostNum(int lostNum) {
this.lostNum = lostNum;
} public void getMaxPingVal() {
System.out.println("最长:" + maxPingVal + "毫秒");
} public void setMaxPingVal(int maxPingVal) {
this.maxPingVal = maxPingVal;
} public void getMinPingVal() {
System.out.println("最短:" + minPingVal + "毫秒");
} public void setMinPingVal(int minPingVal) {
this.minPingVal = minPingVal;
} }
package day14_1;
public class TestExecPing {
public static void main(String[] args) {
ExecPing ep = new ExecPing("www.baidu.com","-n","2");
ep.exec();
System.out.println("======================================");
ep.getLostNum();
ep.getLostPer();
ep.getMaxPingVal();
ep.getMinPingVal();
ep.getSentNum();
}
}
运行截图如下:

Java实现获取命令行中的指定数据的更多相关文章
- Java实现获取命令行中获取指定数据
执行ipconfig /all获取主机所有网卡信息并分析这些字符串,提取出有效网卡(网卡名称,mac地址,ipv4地址,掩码,网关,dns)将网卡插入HashMap中,key是网卡的名称,value是 ...
- Java-Runoob-高级教程-实例-数组:14. Java 实例 – 在数组中查找指定元素
ylbtech-Java-Runoob-高级教程-实例-数组:14. Java 实例 – 在数组中查找指定元素 1.返回顶部 1. Java 实例 - 在数组中查找指定元素 Java 实例 以下实例 ...
- 【Java EE 学习 78 中】【数据采集系统第十天】【Spring远程调用】
一.远程调用概述 1.远程调用的定义 在一个程序中就像调用本地中的方法一样调用另外一个远程程序中的方法,但是整个过程对本地完全透明,这就是远程调用.spring已经能够非常成熟的完成该项功能了. 2. ...
- 【Java EE 学习 69 中】【数据采集系统第一天】【SSH框架搭建】
经过23天的艰苦斗争,终于搞定了数据采集系统~徐培成老师很厉害啊,明明只是用了10天就搞定的项目我却做了23天,还是模仿的...呵呵,算了,总之最后总算是完成了,现在该好好整理该项目了. 第一天的内容 ...
- java多线程向数据库中加载数据
读取本地文件,每行为一条记录,文件大小550M,200万条数据.先将文件读取的内存中,再开启6个线程连接postgresql不同coordinator端口导入数据.代码如下: import java. ...
- Java读取oracle数据库中blob字段数据文件保存到本地文件(转载)
转自:https://www.cnblogs.com/forever2698/p/4747349.html package com.bo.test; import java.io.FileOutput ...
- java 判断Map集合中包含指定的键名,则返回true,否则返回false。
public static void main(String[] args) { Map map = new HashMap(); //定义Map对象 map.put("apple" ...
- java启动jar包中的指定类
运行jar文件的方法是:java -jar xxx.jar 希望运行里面的具体某个类,这时可以通过:java -cp xxx.jar xxx.com.xxxx 其中-cp命令是将xxx.jar加入到c ...
- Java快速向数据库中插入大量数据 比如10万条以上
String sql = "insert into table *****"; //必须要有这句,要不然效果不明显 con.setAutoCommit(false); ps = c ...
随机推荐
- Java—io流之打印流、 commons-IO
打印流 打印流根据流的分类: 字节打印流 PrintStream 字符打印流 PrintWriter /* * 需求:把指定的数据,写入到printFile.txt文件中 * * 分析: * 1, ...
- 工作流选型专项,Camunda or flowable or?
1. 名词解释 1.1. BPM Business Process Management,业务流程管理,“通过建模.自动化.管理和优化流程,打破跨部门跨系统业务过程依赖,提高业务效率和效果”. 1.2 ...
- 最新版CentOS8系统安装和基本配置
一.Centos8新版简介 Redhat公司在2019年5月推出了rhel8,年底推出了centos8,紧接着也会把相关的技术认证完全转换为新平台. 阿里云.华为云目前也已推出centos8的公共镜像 ...
- 2020-04-29:现在你有个秒杀抢购的app,用户不断大量增加,技术层面,你要怎么做
2020-04-29:现在你有个秒杀抢购的app,用户不断大量增加,技术层面,你要怎么做,才能既满足用户需求,又能扛住压力,还能帮公司合理支出?福哥答案2020-04-29: 限流(杀部分用户祭天). ...
- elementUI 表单清空问题
在使用表单的清空方法时,我们需要注意几个问题: 1.我们需要为每个form-item加上prop属性,要不然无法清空(大部分的问题就是出在这) 2.resetFields()方法是重置表单,重置为默认 ...
- 微信小程序携带参数跳转页面/获取页面栈
页面跳转携带参数(以传递两个参数为例) a.wxml 页面传递 1 <navigator url="/pages/b/b?id=1&sid='289'"> &l ...
- Git那点事儿
Git的分支你们是怎么管理的?/ Git的分支管理策略 主分支 master 开发分支 develop 功能分支 feature 预发布分支 release bug 分支 fixbug 其它分支 ot ...
- linux驱动之定时器的使用
被文章摘自一下几位网友.非常感谢他们. http://blog.sina.com.cn/s/blog_57330c3401011cq3.html Linux的内核中定义了一个定时器的结构: #incl ...
- Exploring Adversarial Attack in Spiking Neural Networks with Spike-Compatible Gradient
郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! arXiv:2001.01587v1 [cs.NE] 1 Jan 2020 Abstract 脉冲神经网络(SNN)被广泛应用于神经形态设 ...
- codeforce Round #599(Div.2)
题目传送门 A. Maximum Square 题目意思是给你n个长条,每个长条的高度是num[i](0 < i < n),每一条的宽度都是 1 :然后求这些长条可以组成的最大面积的正方形 ...