2015-12-10 130 views
0

我想根据递增的时间戳和递减的严重性对下面的日志文件进行排序。下面是我的Input.txt,我想将输出写入另一个文件。附加了我的Java代码。请提出来解决这个按升序和降序对文件内容进行排序

[2015-11-19 10:33:54.934+0000] [HOST1] [INFO] [CLASS1] [MESSAGE1 something] 
[2015-11-19 10:31:55.128+0000] [HOST2] [ERROR] [CLASS2] [MESSAGE2 random] 
[2015-11-19 10:31:55.128+0000] [HOST3] [INFO] [CLASS6] [MESSAGE5 from another host] 
[2015-11-19 10:37:55.246+0000] [HOST2] [WARN] [CLASS9] [MESSAGE9 again] 


import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.PrintWriter; 
import java.util.ArrayList; 
import java.util.Collections; 

public class SortLogFile { 

    public static void main(String[] args) throws IOException { 
     BufferedReader reader = null; 
     PrintWriter outputStream = null; 
     ArrayList<String> rows = new ArrayList<String>(); 
     try { 
      reader = new BufferedReader(new FileReader("Input.txt")); 
      outputStream = new PrintWriter(new FileWriter("Output.txt")); 
      String file; 
      while ((file = reader.readLine()) != null) { 
       rows.add(file); 
      } 
      Collections.sort(rows); 
      String[] strArr = rows.toArray(new String[0]); 
      for (String cur : strArr) 
       outputStream.println(cur); 
     } finally { 
      if (reader != null) { 
       inputStream.close(); 
      } 
      if (outputStream != null) { 
       outputStream.close(); 
      } 
     } 
    } 

} 
+0

请格式化您的代码.. – HCarrasko

回答

0

创建一个类来表示每一行。这个类必须有两个属性(日期和严重性)。 对于严重级别1,最好使用具有值的枚举,以便可以进行比较。 将所有对象添加到列表并对其进行排序。

list.sort((a, b) -> { 
    if (a.getData().equals(b.getData())) { 
     return a.getSeverity().compareTo(b.getSeverity); 
    } else { 
     return a.getData().compareTo(b.getData()); 

    } 
}); 
相关问题