zoukankan      html  css  js  c++  java
  • log時差計算


        public void log時差計算() {

            long line = 0;
            List<String> lineList = new ArrayList<String>();
            try {
                Map<String, List<Long>> map = new HashMap<String, List<Long>>();
                
                File file = new File("C:\\work\\sifaccess.log20150130");
                BufferedReader reader = new BufferedReader(new FileReader(file));
                String tempString = null;
                // 読込
                String date1 = null;
                String id1 = null;
                String ip1 = null;
                String date2 = null;
                String id2 = null;
                String ip2 = null;
                while ((tempString = reader.readLine()) != null) {
                    lineList.add(tempString);
                }
                reader.close();
                
                for (int i = 0; i < lineList.size(); i ++) {
                    String lineStr = lineList.get(i);
                    line ++;
                    if (lineStr.indexOf(" UP   IF-ID") > 0) {
                        date1 = lineStr.substring(0, 23);
                        ip1 = lineStr.substring(24, lineStr.indexOf(", "));
                        id1 = lineStr.substring(lineStr.indexOf(" /") + 1, lineStr.indexOf(".htm") + 4);

                        // 次の行
                        boolean isFind = false;
                        for (int j = i + 1 ; j < lineList.size(); j ++) {
                            lineStr = lineList.get(j);
                            if (lineStr.indexOf(" UP ") > 0) {
                                continue;
                            }
                            ip2 = lineStr.substring(24, lineStr.indexOf(", "));
                            date2 = lineStr.substring(0, 23);
                            id2 = lineStr.substring(lineStr.indexOf(" /") + 1, lineStr.indexOf(".htm") + 4);
                            
                            if (ip1.equals(ip2) && id1.equals(id2)) {
                                SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss.SSS");

                                Date dateUP = formatter.parse(date1);
                                Date dateDOWN = formatter.parse(date2);
                                
                                long time = dateDOWN.getTime() - dateUP.getTime();
                                    
                                if (map.containsKey(id1)) {
                                    List<Long> list = (List<Long>)map.get(id1);
                                    list.add(time);
                                    map.put(id1, list);
                                }
                                else {
                                    List<Long> list = new ArrayList<Long>();
                                    list.add(time);
                                    map.put(id1, list);
                                }
                                isFind = true;
                                break;
                            }
                        }
                        if (!isFind) {
                            System.out.println("error:" + line + "行");
                        }
                    }

                    if (lineStr.indexOf(" DOWN method:") > 0) {
                        long time = Long.parseLong(lineStr.substring(lineStr.indexOf(" out:") + 5).replace("ms", ""));
                        id1 = lineStr.substring(lineStr.indexOf(" /") + 1, lineStr.indexOf(".htm") + 4);
                        
                        if (map.containsKey(id1)) {
                            List<Long> list = (List<Long>)map.get(id1);
                            list.add(time);
                            map.put(id1, list);
                        }
                        else {
                            List<Long> list = new ArrayList<Long>();
                            list.add(time);
                            map.put(id1, list);
                        }
                        
                    }
                }
                System.out.println("読込終了:" + line + "行");

                
                // 書き込み
                File outFile = new File("C:\\work\\access.txt");
                if(!outFile.exists()) {
                    try {
                        outFile.createNewFile();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(outFile), "Shift_JIS");
                BufferedWriter bw = new BufferedWriter(osw);
                
                Set<String> set = map.keySet();
                for (String key : set) {
                    
                    List<Long> list = map.get(key);
                    long min=99999999L;
                    long max=0;
                    long ave = 0;
                    long sum = 0;
                    for (Long second : list) {
                        long temp = second.longValue();
                        sum = sum + temp;
                        if (min > temp) {
                            min = temp;
                        }
                        if (max < temp) {
                            max = temp;
                        }
                    }
                    ave = sum / list.size();
                    bw.write(key + "    " + min + "    " + max + "    " + ave + "    " + list.size() + "\r\n");
                }
                bw.close();
                osw.close();
                System.out.println("書込終了");

            } catch (Exception e) {
                System.out.println("error line:" + line);
                e.printStackTrace();
            }
        }

  • 相关阅读:
    一般工程文件和DLL工程文件区别
    [转载 js]javascript的陷井
    函数两种定义方法的区别
    D2视频补完,哈哈,有我的镜头
    YUI中js的继承示例
    状态模式
    YUI2.x和YUI3的差别
    函数两种定义方法的区别
    YUI中js的继承示例
    D2视频补完,哈哈,有我的镜头
  • 原文地址:https://www.cnblogs.com/taobr/p/4329594.html
Copyright © 2011-2022 走看看