简体   繁体   English

以升序和降序对文件内容进行排序

[英]sort the file contents in ascending and descending order

I want to sort the below log file based on increasing timestamp and decreasing severity.Below is my Input.txt and I want to write the output in another file.Attached my Java code.Pls suggest to fix this 我想根据增加的时间戳和降低的严重性对下面的日志文件进行排序。下面是我的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();
            }
        }
    }

}

Create a class to represent each line. 创建一个类来代表每一行。 This class must have two attributes (date and severity). 此类必须具有两个属性(日期和严重性)。 For the severity one, it's better to use an enum with a value, so it can be compared. 对于严重性,最好使用带有值的枚举,以便进行比较。 Add all objects to a list and sort it. 将所有对象添加到列表中并对其进行排序。

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

    }
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM