Java每隔一个小时调用ping -t 命令十分钟,并统计结果写入文件

package ping;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Ping {
    public static void main(String[] args) {
        timer();
    }

    public static void timer() {
        Calendar c = Calendar.getInstance();
        c.set(Calendar.HOUR_OF_DAY, 14);//时
        c.set(Calendar.MINUTE, 16); //分
        c.set(Calendar.SECOND, 0);//秒
        Date time = c.getTime(); // 得到执行任务的时间
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            public void run() {
                ping();
            }

        }, time, 3600000);// 间隔一小时
    }

    public static void ping() {
        Runtime runtime = Runtime.getRuntime(); // 获取当前程序的运行进对象
        Process process = null; // 声明处理类对象
        String line = null; // 返回行信息
        InputStream is = null; // 输入流
        InputStreamReader isr = null;// 字节流
        BufferedReader br = null;
        String ip = "14.215.177.39";
        Integer max = 0;
        Integer min = 100000;
        Integer avg = 0;
        Date date = new Date();
        Calendar ca = Calendar.getInstance();
        ca.setTime(date);
        try {
            process = runtime.exec("ping -t " + ip); // PING
            is = process.getInputStream(); // 实例化输入流
            isr = new InputStreamReader(is);// 把输入流转换成字节流
            br = new BufferedReader(isr);// 从字节中读取文本
            int k = 0;
            while ((line = br.readLine()) != null) {
                k++;
                Date date1 = new Date();
                Calendar ca1 = Calendar.getInstance();
                ca1.setTime(date1);
                //判断ping -t 执行时间 
                if (ca.get(Calendar.MINUTE) + 10 == ca1.get(Calendar.MINUTE)) {
                    break;
                }
                if (line.length() > 0 && line.indexOf("时间=") > 0) {
                    
                    String i = line.substring(line.indexOf("时间="));
                    System.out.println(new SimpleDateFormat("MM-dd HH:mm:ss").format(date1)+" "+i);
                    //匹配时间
                    Pattern pattern = Pattern.compile("=[0-9]+ms");
                    Matcher matcher = pattern.matcher(i);
                    if (matcher.find()) {
                        //截取时间
                        String a = matcher.group().replace("=", "").replace("ms", "");
                        Integer j = new Integer(a);
                        if (j > max) {
                            max = j;
                        }
                        if (j < min) {
                            min = j;
                        }
                        avg += j;
                    }
                }
            }
            is.close();
            isr.close();
            br.close();
            // System.out.println(line);
            String result=new SimpleDateFormat("MM-dd HH:mm:ss").format(new Date())+" 最小:" + min + "ms 最大:" + max + "ms 平均:" + avg / k + "ms\r\n";
            write("C:\\Users\\Administrator\\Desktop\\result.txt",result);
            System.out.println(result);
        } catch (IOException e) {
            System.out.println(e);
            runtime.exit(1);
        }
    }
    public static void write(String file ,String content) {
        BufferedWriter out=null;
        try {
            out=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file,true)));
            out.write(content);
        } catch ( IOException e) {
            e.printStackTrace();
        } finally {
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
                
            }
        }
    }

}
 

你可能感兴趣的:(Java每隔一个小时调用ping -t 命令十分钟,并统计结果写入文件)