计算log文件的开始结束时间差

  1 import java.io.BufferedReader;
  2 import java.io.BufferedWriter;
  3 import java.io.File;
  4 import java.io.FileNotFoundException;
  5 import java.io.FileReader;
  6 import java.io.FileWriter;
  7 import java.io.IOException;
  8 import java.io.RandomAccessFile;
  9 import java.util.ArrayList;
 10 import java.util.regex.Matcher;
 11 import java.util.regex.Pattern;
 12 
 13 
 14 public class TimeCount {
 15 
 16     public static void main(String[] args) throws IOException {
 17         // TODO Auto-generated method stub
 18         //读取具体文件每一行的内容
 19         String content;
 20         //Job_Objectのlist
 21         ArrayList<Job> JobObjecttList = new ArrayList<Job>();
 22         //需要分析文件所在的文件夹
 23         String filePath ="C:\\TimeCount\\in\\";
 24 //        String filePath =args[0];
 25         File file = new File(filePath);
 26         //判断文件或目录是否存在
 27         if(!file.exists()){
 28             System.out.println("「"+filePath + " not exists」");
 29             
 30         }
 31         //获取该文件夹下所有的文件
 32         File[] fileArray= file.listFiles();
 33         File fileName = null;
 34         
 35         for(int i =0;i<fileArray.length;i++){
 36             fileName = fileArray[i];
 37             //判断此文件是否存在
 38             if(fileName.isDirectory()){
 39                 System.out.println("「"+fileName.getName()+" not exists」");
 40                 
 41             }else{
 42                 BufferedReader bfr = new BufferedReader(new FileReader(filePath+fileName.getName()));
43 Job j = new TimeCount().new Job(); 44 // Job j = new Job(); 45 //正序读取,并将文件名,开始时间放入对象 46 while((content = bfr.readLine()) != null) { 47 //正则表达式匹配到符合时间格式的那一行 48 if(content.matches(".*\\d{4}\\/\\d{2}(\\/\\d{2}).*")) { 49 //正则表达式匹配到符合时间格式的字符串 50 Pattern pt=Pattern.compile("\\d{4}\\/\\d{2}(\\/\\d{2})"); 51 Matcher mt=pt.matcher(content); 52 while(mt.find()) { 53 int a = mt.start()+11; 54 // System.out.println(content.substring(a,a+12)); 55 56 j.setJobId(fileName.getName()); 57 //截取这一行的时分秒的字符串,并保存到Job对象中 58 j.setJobTimeS(content.substring(a,a+12)); 59 break; 60 } 61 break; 62 } 63 } 64 //倒序读取,并将结束时间放入对象 65 readReverse(j,filePath+fileName.getName(),"SJIS"); 66 JobObjecttList.add(j); 67 bfr.close(); 68 69 // System.out.println(fileName.getName()); 70 } 71 } 72 //写结果文件 73 BufferedWriter bfw = new BufferedWriter(new FileWriter("C:\\TimeCount\\out\\result.txt")); 74 // BufferedWriter bfw = new BufferedWriter(new FileWriter(args[1])); 75 //头部标题 76 String contentResultStr ="JobID JobStartTime JobEndTime TimeDiff"; 77 bfw.write(contentResultStr); 78 bfw.write("\n"); 79 String contentResult =""; 80 int timeDiff = 0; 81 //循环输出Job对象的list中的内容 82 for(Job j:JobObjecttList) { 83 System.out.println(j.getJobId() + " "+j.getJobTimeS()+" "+j.getJobTimeE()); 84 85 timeDiff = timeCount(j.getJobTimeS(),j.getJobTimeE()); 86 contentResult = j.getJobId()+" "+j.getJobTimeS()+" "+j.getJobTimeE()+" "+timeDiff; 87 bfw.write(contentResult); 88 bfw.write("\n"); 89 } 90 bfw.close(); 91 } 92 93 /* 94 * 倒序读取,并将结束时间放入对象 95 * */ 96 public static void readReverse(Job j,String filename, String charset) { 97 RandomAccessFile rf = null; 98 try { 99 String content; 100 rf = new RandomAccessFile(filename, "r"); 101 long fileLength = rf.length(); 102 long start = rf.getFilePointer();// 返回此文件中的当前偏移量 103 long readIndex = start + fileLength -1; 104 String line; 105 rf.seek(readIndex);// 设置偏移量为文件末尾 106 int c = -1; 107 while (readIndex > start) { 108 c = rf.read(); 109 if (c == '\n' || c == '\r') { 110 line = rf.readLine(); 111 if (line != null) { 112 content = new String(line.getBytes("ISO-8859-1"),charset); 113 if(content.matches(".*\\d{4}\\/\\d{2}(\\/\\d{2}).*")) { 114 Pattern pt=Pattern.compile("\\d{4}\\/\\d{2}(\\/\\d{2})"); 115 Matcher mt=pt.matcher(content); 116 while(mt.find()) { 117 int a = mt.start()+11; 118 // System.out.println(content.substring(a,a+12)); 119 j.setJobTimeE(content.substring(a,a+12)); 120 break; 121 } 122 break; 123 } 124 // System.out.println(new String(line.getBytes("ISO-8859-1"),charset)); 125 } else { 126 // System.out.println(line); 127 } 128 readIndex--; 129 } 130 readIndex--; 131 rf.seek(readIndex); 132 // if (readIndex == 0) {// 当文件指针退至文件开始处,输出第一行 133 // System.out.println(rf.readLine()); 134 // } 135 } 136 } catch (FileNotFoundException e) { 137 e.printStackTrace(); 138 } catch (IOException e) { 139 e.printStackTrace(); 140 } finally { 141 try { 142 if (rf != null) 143 rf.close(); 144 } catch (IOException e) { 145 e.printStackTrace(); 146 } 147 } 148 } 149 150 /* 151 * 计算每个job的开始结束时间差 152 * */ 153 public static int timeCount(String timeStr,String timeEnd) { 154 int timeStr_Hours = Integer.parseInt(timeStr.substring(0, 2)); 155 int timeEnd_Hours = Integer.parseInt(timeEnd.substring(0, 2)); 156 int timeStr_mins = Integer.parseInt(timeStr.substring(3, 5)); 157 int timeEnd_mins = Integer.parseInt(timeEnd.substring(3, 5)); 158 int timeStr_seconds = Integer.parseInt(timeStr.substring(6, 8)); 159 int timeEnd_seconds = Integer.parseInt(timeEnd.substring(6, 8)); 160 int result = (timeEnd_Hours-timeStr_Hours)*3600 161 +(timeEnd_mins-timeStr_mins)*60 162 +(timeEnd_seconds-timeStr_seconds); 163 return result; 164 } 165 166 /** 167 * Job对象 168 * */ 169 class Job{ 170 private String jobId; 171 private String jobTimeS; 172 private String jobTimeE; 173 public String getJobId() { 174 return jobId; 175 } 176 public void setJobId(String jobId) { 177 this.jobId = jobId; 178 } 179 public String getJobTimeS() { 180 return jobTimeS; 181 } 182 public void setJobTimeS(String jobTimeS) { 183 this.jobTimeS = jobTimeS; 184 } 185 public String getJobTimeE() { 186 return jobTimeE; 187 } 188 public void setJobTimeE(String jobTimeE) { 189 this.jobTimeE = jobTimeE; 190 } 191 } 192 193 }

 

posted @ 2021-09-29 15:55  Rookie12138  阅读(159)  评论(0编辑  收藏  举报