import java.io.*; import java.lang.*; import java.util.*; class ReadEvents { public static void main(String[] args) { try{ FileReader in = new FileReader(args[0]); BufferedReader EventFile = new BufferedReader(in); // read the first Event from the input file FileOutputStream printToFile = new FileOutputStream("mails.txt"); PrintStream out = new PrintStream(printToFile); String CurrentEvent = EventFile.readLine(); String field; StringTokenizer extractor; boolean sending = true; int SumOfTime = 0; int NumberOfEvents = 0; if (CurrentEvent == null) return; // empty file, exit CurrentEvent = EventFile.readLine(); // skip the first line // output the header out.print("event_id" + " "); out.print("event_type" + " "); out.print("time" + " "); out.print("receiver_id" + " "); out.print("sender_id" + " "); out.print("priority" + " " + '\t'); out.println("message"); // Read and process every Event while (CurrentEvent!=null) { // use tokenizer to extract each field in a Event extractor = new StringTokenizer(CurrentEvent, " \t\n"); field = extractor.nextToken(); // extract the first field event_id out.print(field + " " + '\t' + " "); field = extractor.nextToken(); // extract the second field event_type out.print(field + " " + '\t' + " "); if (field.charAt(0) == 'R') // determine if it is a sending event sending = false; else sending = true; field = extractor.nextToken(); // extract the third field time out.print(field + " " + '\t' + " "); SumOfTime += Integer.parseInt(field); // Sum up all arrival times NumberOfEvents++; field = extractor.nextToken(); // extract the fourth field receiver_id out.print(field + " " + '\t'); if (sending) { field = extractor.nextToken(); // extract the fifth field sender_id out.print(field + " " + '\t'); field = extractor.nextToken(); // extract the sixth field priority out.print(field + " " + '\t'); // print the message field out.print(extractor.nextToken()); while (extractor.hasMoreTokens()) out.print(" " + extractor.nextToken()); out.println(); } else out.println(); CurrentEvent = EventFile.readLine(); // read the next Event } out.println("Average event time: " + SumOfTime/NumberOfEvents); in.close(); EventFile.close(); } // input file must be well-formated catch (NumberFormatException e){ System.out.println("Event format errors in input file"); } // I/O errors catch (IOException e){ System.out.println("Unable to read input file"); } } }