package edu.usc.enl.dynamicmeasurement.data.scenario.traffic; import java.io.*; import java.util.ArrayList; import java.util.List; import java.util.PriorityQueue; /** * Created with IntelliJ IDEA. * User: masoud * Date: 10/27/13 * Time: 9:41 PM */ public class MergeTrafficFiles { // output input1 input2 input3 public static void main(String[] args) throws IOException { List<FileData> allFiles = new ArrayList<>(); PriorityQueue<FileData> files = new PriorityQueue<>(); String outputFile = args[0]; try (PrintWriter pw = new PrintWriter(new FileWriter(outputFile))) { for (int i = 1; i < args.length; i++) { String arg = args[i]; FileData e = new FileData(arg); files.add(e); allFiles.add(e); } while (files.size() > 0) { FileData file = files.poll(); file.write(pw); if (file.hasData()) { files.add(file); } } for (FileData file : allFiles) { file.finish(); } } } public static long getTime(String line) { return Long.parseLong(line.substring(0, line.indexOf(","))); } private static class FileData implements Comparable<FileData> { private String line; private long time; private BufferedReader br; public FileData(String fileName) throws IOException { br = new BufferedReader(new FileReader(fileName)); line = br.readLine(); time = getTime(line); } public void finish() throws IOException { br.close(); } public boolean hasData() { return line != null; } @Override public int compareTo(FileData o) { return Long.compare(time, o.time); } public void write(PrintWriter pw) throws IOException { pw.println(line); line = br.readLine(); if (line != null) { time = getTime(line); } } } }