用Java解析文本文件的良好实践

时间:2012-07-22 09:06:35

标签: java parsing exception logging error-handling

我想解析代表日志的文本文件。我希望它足够强大,可以处理可能发生的所有错误。虽然我对最佳实践和我应该考虑的错误一无所知。我将使用JAVA来实现这一点。

示例日志: 2012-07-16 10:23:40,558 - 127.0.0.1 - Paremter数组[param1 = 1,param2 = 1,param3 = 0,] - 383

我已经编写了一个如下工作的prasing代码:

public Parser(String log) {
    this.log = log;
    this.parse();

}

public void parse() {

    String[] temp = new String[10];
    String[] temp2 = new String[10];

    temp = log.split(" - ");
    key = temp[3];
    id = Integer.parseInt(key);
    String IP = temp[1];
    String str;

    String temp3 = temp[2].substring(temp[2].indexOf("g"), temp[2].indexOf("]"));
    temp = temp3.split(",");
    str = "param1";

    boolean ordered = CheckOrder(temp);


    if (ordered) {
        for (int q = 0; q < temp.length; q++) {

            temp[q] = temp[q].substring(temp[q].indexOf("=") + 1);

        }



        if (temp[0].equals("q")) {
            param= 0;
        } else if (temp[0].equals("k")) {
            param= 1;
        } else {
            param= 2;
        }

         // Same way for all parameters

    }


}

1 个答案:

答案 0 :(得分:1)

检查您使用的所有方法的javadoc,并确保处理所有名义和例外情况:

  • 该文件不存在:抛出异常。正确处理此异常
  • String.indexOf()找不到它的内容。它返回-1。正确处理此案例
  • String.split()不会返回我期望的长度数组。正确处理此案例
  • ...

将你的大方法分成几个子方法,每个方法只做一件事。

编写单元测试以检查您的方法是否按照所有可能的输入执行它们应该执行的操作。

请注意,“正确处理事物”可能意味着:抛出异常,因为输入不正确,如果合同是日志遵循明确定义的格式。在这种情况下,生成日志的代码不正确。但最好有一个异常,告诉你预期的格式和格式,而不是模糊的NullPointerException或ArrayIndexOutOfBoundsException。

以上内容适用于您编写的任何类型的代码,而不仅仅适用于文件解析。

旁注:

String[] temp = new String[10];
temp = log.split(" - ");

创建一个包含10个元素的数组,然后将其替换为另一个数组(由log.split(" - ")返回的数组),有什么意义。