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 ...
随机推荐
- Spring IOC 启动过程
1. 引言 本篇博文主要介绍 IOC 容器的启动过程,启动过程分为两个步骤,第一个阶段是容器的启动阶段,第二个阶段是 Bean 实例化阶段,这两个阶段各自需要执行的步骤如下图,接下来会一一介绍. 需要 ...
- CSS 学习第一天
css的三种引入方式: 1.内嵌:直接在标签中添加style属性 格式:<标签名 style="样式1:样式值1:样式2:样式值2"> 2.内联:在head标签中添加& ...
- Vue 倒计时组件封装
项目中需要用到倒计时的功能,封装了一个组件. 代码解读: 1:created周期中获取传入参数时间的剩余秒数: this.initSecondsLeft() 并绑定间隔事件 intervalEvent ...
- 金题大战Vol.0 A、凉宫春日的叹息
金题大战Vol.0 A.凉宫春日的叹息 题目描述 给定一个数组,将其所有子区间的和从小到大排序,求第 \(k\) 小的是多少. 输入格式 第一行两个数\(n\),$ k\(,表示数组的长度和\)k$: ...
- CentOS7(Linux)源码安装MySQL5.7.X
介绍 软件应用最重要的就是数据库了,可是还有小伙伴不会在Linux上安装MySQL数据库,今天就来讲讲如何在CentOS7环境使用源码进行安装MySQL5.7.X. MySQL官网下载链接:https ...
- MySql安装后在服务管理器里边找不到MySql服务项的解决办法(win10)
问题描述: 成功安装MySql后,使用mysql的时候,在CMD中输入net start mysql,提示服务名无效,查看服务列表也找不到mysql服务. 解决办法: 首先用管理员身份打开CMD命令, ...
- Robot Framework(2)——简单运行案例
1.打开RIDE 之前介绍的3种方式都可以 2.创建工程和测试套件 1>点击File-New Project ①Name:工程命名 ②Parent Directory:上级目录,工程会创建在这个 ...
- 弱校验之@NotNull@NotEmpty@NotBlank
@NotNull 适用于非空判断 The annotated element must not be {@code null}. CharSequence, Collection, Map 和 Arr ...
- 第1篇 Scrum冲刺博客
一.Alpha阶段各成员任务 梁天龙 任务名称 预计工时 编辑历史记录 2 登陆按键设计 3 考勤记录页面 2 人数记录页面 2 学习课程页面 4 建议页面 2 黄岳康 任务名称 ...
- Kafka工作流程
Kafka生产过程分析 1 写入方式 producer采用推(push)模式将消息发布到broker,每条消息都被追加(append)到分区(patition)中,属于顺序写磁盘(顺序写磁盘效率比随机 ...